{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": true,
    "editable": true
   },
   "source": [
    "## How data scientists use BigQuery\n",
    "\n",
    "This notebook accompanies the presentation \n",
    "[\"Machine Learning and Bayesian Statistics in minutes: How data scientists use BigQuery\"](http://bit.ly/bigquery-datascience-talk)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Bayesian Statistics in minutes\n",
    "\n",
    "Let's say that we want to find the probability of a flight being late $\\theta$ given a specific departure delay $\\textbf{D}$ \n",
    "Bayes' Law tells that can be obtained for any specific departure delay using the formula:\n",
    "\n",
    "<center><font size=\"+5\">\n",
    "$P(\\theta|\\textbf{D}) = P(\\theta ) \\frac{P(\\textbf{D} |\\theta)}{P(\\textbf{D})} $\n",
    "</font></center>\n",
    "\n",
    "Once you have large datasets, the probabilities above are just exercises in counting and so, applying Bayesian statistics is super-easy in BigQuery. \n",
    "\n",
    "For example, let's find the probability that a flight will be 15+ minutes late: "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%bigquery df\n",
    "WITH rawnumbers AS (\n",
    "SELECT\n",
    "  departure_delay,\n",
    "  COUNT(1) AS num_flights,\n",
    "  COUNTIF(arrival_delay < 15) AS num_ontime\n",
    "FROM\n",
    "  `bigquery-samples.airline_ontime_data.flights`\n",
    "GROUP BY\n",
    "  departure_delay\n",
    "HAVING\n",
    "  num_flights > 100\n",
    "),\n",
    "\n",
    "totals AS (\n",
    "SELECT\n",
    "   SUM(num_flights) AS tot_flights,\n",
    "   SUM(num_ontime) AS tot_ontime\n",
    "FROM rawnumbers\n",
    "),\n",
    "\n",
    "bayes AS (\n",
    "SELECT\n",
    "  departure_delay,\n",
    "  num_flights / tot_flights AS prob_D,\n",
    "  num_ontime / tot_ontime AS prob_D_theta,\n",
    "  tot_ontime / tot_flights AS prob_theta\n",
    "FROM\n",
    "  rawnumbers, totals\n",
    "WHERE\n",
    "  num_ontime > 0\n",
    ")\n",
    "\n",
    "SELECT\n",
    "  *, (prob_theta * prob_D_theta / prob_D) AS prob_ontime\n",
    "FROM\n",
    "  bayes\n",
    "ORDER BY\n",
    "  departure_delay ASC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df.plot(x='departure_delay', y='prob_ontime');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "But is it right, though? What's with the weird hump for early departures (departure_delay less than zero)?\n",
    "\n",
    "First, we should verify that we can apply Bayes Law. Grouping by the departure delay is incorrect if the departure delay is a chaotic input variable. We have do exploratory analysis to validate that:\n",
    "\n",
    "* If a flight departs late, will it arrive late?\n",
    "* Is the relationship between the two variables non-chaotic?\n",
    "* Does the linearity hold even for extreme values of departure delays?\n",
    "\n",
    "This, too, is straightforward in BigQuery"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "%%bigquery df\n",
    "SELECT\n",
    "  departure_delay,\n",
    "  COUNT(1) AS num_flights,\n",
    "  APPROX_QUANTILES(arrival_delay, 10) AS arrival_delay_deciles\n",
    "FROM\n",
    "  `bigquery-samples.airline_ontime_data.flights`\n",
    "GROUP BY\n",
    "  departure_delay\n",
    "HAVING\n",
    "  num_flights > 100\n",
    "ORDER BY\n",
    "  departure_delay ASC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>departure_delay</th>\n",
       "      <th>0%</th>\n",
       "      <th>10%</th>\n",
       "      <th>20%</th>\n",
       "      <th>30%</th>\n",
       "      <th>40%</th>\n",
       "      <th>50%</th>\n",
       "      <th>60%</th>\n",
       "      <th>70%</th>\n",
       "      <th>80%</th>\n",
       "      <th>90%</th>\n",
       "      <th>100%</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-37.0</td>\n",
       "      <td>-66.0</td>\n",
       "      <td>-44.0</td>\n",
       "      <td>-41.0</td>\n",
       "      <td>-35.0</td>\n",
       "      <td>-30.0</td>\n",
       "      <td>-23.0</td>\n",
       "      <td>-17.0</td>\n",
       "      <td>-12.0</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>6.0</td>\n",
       "      <td>33.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-36.0</td>\n",
       "      <td>-74.0</td>\n",
       "      <td>-43.0</td>\n",
       "      <td>-39.0</td>\n",
       "      <td>-37.0</td>\n",
       "      <td>-32.0</td>\n",
       "      <td>-25.0</td>\n",
       "      <td>-18.0</td>\n",
       "      <td>-14.0</td>\n",
       "      <td>-7.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>49.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-35.0</td>\n",
       "      <td>-68.0</td>\n",
       "      <td>-45.0</td>\n",
       "      <td>-40.0</td>\n",
       "      <td>-36.0</td>\n",
       "      <td>-28.0</td>\n",
       "      <td>-19.0</td>\n",
       "      <td>-14.0</td>\n",
       "      <td>-8.0</td>\n",
       "      <td>-4.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>85.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-34.0</td>\n",
       "      <td>-58.0</td>\n",
       "      <td>-44.0</td>\n",
       "      <td>-40.0</td>\n",
       "      <td>-35.0</td>\n",
       "      <td>-30.0</td>\n",
       "      <td>-25.0</td>\n",
       "      <td>-19.0</td>\n",
       "      <td>-14.0</td>\n",
       "      <td>-8.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>39.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-33.0</td>\n",
       "      <td>-59.0</td>\n",
       "      <td>-43.0</td>\n",
       "      <td>-39.0</td>\n",
       "      <td>-36.0</td>\n",
       "      <td>-32.0</td>\n",
       "      <td>-28.0</td>\n",
       "      <td>-20.0</td>\n",
       "      <td>-14.0</td>\n",
       "      <td>-7.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>25.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   departure_delay    0%   10%   20%   30%   40%   50%   60%   70%  80%  90%  \\\n",
       "0            -37.0 -66.0 -44.0 -41.0 -35.0 -30.0 -23.0 -17.0 -12.0 -3.0  6.0   \n",
       "1            -36.0 -74.0 -43.0 -39.0 -37.0 -32.0 -25.0 -18.0 -14.0 -7.0  2.0   \n",
       "2            -35.0 -68.0 -45.0 -40.0 -36.0 -28.0 -19.0 -14.0  -8.0 -4.0  3.0   \n",
       "3            -34.0 -58.0 -44.0 -40.0 -35.0 -30.0 -25.0 -19.0 -14.0 -8.0  2.0   \n",
       "4            -33.0 -59.0 -43.0 -39.0 -36.0 -32.0 -28.0 -20.0 -14.0 -7.0  5.0   \n",
       "\n",
       "   100%  \n",
       "0  33.0  \n",
       "1  49.0  \n",
       "2  85.0  \n",
       "3  39.0  \n",
       "4  25.0  "
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "percentiles = df['arrival_delay_deciles'].apply(pd.Series)\n",
    "percentiles = percentiles.rename(columns = lambda x : str(x*10) + \"%\")\n",
    "df = pd.concat([df['departure_delay'], percentiles], axis=1)\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false,
    "deletable": true,
    "editable": true,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAELCAYAAAAx94awAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzsnXd8VFX6/9+TyaT33ntCEkLoXaSIqCBFqlgQFbuuW1xX3dV1d9XV336tWLECioCCUpUWIBBCeiGQEEjvPZmS6XN/fwwGkAxMQkDU+369eJm5c+8590zMZ859nnM+j0QQBEREREREfl/Y/NI3ICIiIiJy9RHFX0REROR3iCj+IiIiIr9DRPEXERER+R0iir+IiIjI7xBR/EVERER+h4jiLyIiIvI7RBR/ERERkd8hoviLiIiI/A6x/aVv4Fx8fHyEiIiIX/o2REREfiUIggmdrhWdrhUQcHQMx9bW5arfh1arRaFQoNPpsLW1xdXVFUdHx8tq06QxYJTrEPQmJLY2SN3ssHHsXbJzcnJaBUHw7Uv715T4R0REkJ2d/UvfhoiIyDWO0aimtnYNlVWrMBhk+PouJyrqT7g4x17V+6itrSUlJYXy8nJcXV2ZPHkyw4cPRyqV9rtNTVkn8t1V6KrkSL0ccJsehtMwPyQ2kl7P12nU2Ds6VfW1n2tK/EVEREQuhsmkpa5+A5WV76PTteDtdT1RUX/GzW3IVb2PxsZG9u/fz8mTJ3FycuKmm25i1KhRyGSyfreprZYj312F9nQnUjc7PG6LwXmUPxJp79F5vU5Lwe6dZH7/Tb/6E8VfRETkmsdkMtDY+B0VFe+g0dbj4TGGpKSVeHqMvqr30drayoEDBygqKsLe3p5p06YxduxY7O3t+92mrkGFfHclmuJ2bJxtcZ8Vhcu4ACSy3p8ejAY9Rfv3cHTzBpTtbYQNGdavfkXxFxERuWYRBBNNzTuoqHib7u4KXF2HEB//Cl5e1yGR9B4GuVJkZmbyww8/YGtry6RJk5gwYcJlxfX1Ld3I91ajLmxBYi/F7cZwXK4Lwsa+d1k2mYwUHzpA+rfr6GpuIigugZmP/4XQwcnw/Mt97l8UfxERkWsOQRBobd1HecWbKJUlODvHkTzkA3x8brzqog+Qm5vLzp07iYuLY86cObi49D+pbOjQIN9XTXduExJbG1ynhOI6KRgbp95DRoLJxKnMI6Rt/Ir2uhr8IqK57ZmHiRw26rI+C1H8RURErhkEQaCj4whl5W8gl+fj6BjO4MQ38fefhUTS/yTq5VBYWMjWrVuJiYlh8eLF2Nr2TzaNch3y/dWoMhsBcBkfhOuUUKSudr2eLwgClfk5HN6wluaKMryCQpj9p2eIHTMBic3lr9IXxV9EROSaoLMrh7Ky1+nszMDePpD4+FcIDJiPjU3/k6iXy4kTJ/juu++IiIhgyZIl/RJ+o0qPIrUW1ZF6BKMJ51EBuE4Lw9bDcp6g5sQxDq9fS/3JE7j7+XPzo38iYdIUbGwG7gtQFH8REZFfFK2uleLiZ2hr249M5k1c7PMEBS1FKu1/ErWv6HQ6cnNzaWlp6TlmMpkoKCggODiYpUuX9nklj0ljQHm4DsWhOgSdEaehvrhND8fWx3KeoOH0SdI2fElVYR4unl5MX/EoSVNvRGrbe98GvZHjqfV9uq+fEMVfRETkF0Ov7yA/bxnd6iqio54iNPQepFKnq9a/wWAgNzeX1NRUlEolzs7O58XRIyMjWbRoUZ9W85h0RlTpDSgO1mDqNuAw2Bv3G8ORBThbvKalupK0DV9Sln0UR1c3Jt99P0NnzERm13u/RqOJ4rQGsndWourUWj/gcxDFX0RE5BdBr5eTl38P3eoKhiZ/gpfXxKva/7Fjx9i7dy9dXV2EhYWxaNEiwsPD+92eYDChympEnlKNSaHHPs4T9xnh2IW4Wrymo6GOI9+so+RIKnYOjkxYfCcjZ87FzrH3L0CTSeBUZiOZ2yuQt2oIiHJj+r2JPP5R3+9XFH8REZGrjsGgpKDgPpTKUpKHfHDVhT89PZ1du3YRGBjI7NmziY6O7vfKGcEo0J3XhHxvNcZOLXYRbrjfkYB9pLvFa+StzaR/u57jB/cilckYM3cho2bPx9Gl9y8KQRAoz2shY1sFHQ0qfEJdmPVYMuFJ3v2+b1H8RURErih6fQdK5cme1wICFRUrkSsKSRq8Eh+fqVf1frKzs9m1axcJCQksXLiw31YMgklAfawV+d4qDC1qZCEueM6PxT7Ww6Igqzo7yPhuI4V7fwBg2E2zGDtvMc4enr33IQhUH28nY2s5LdUKPAOcuOmBJKKH+/bYPRg6Ovp1/6L4i4iIXBEMBgVV1Z9QU/M5RqPqZ+9KGJz4Bn5+N13Ve8rPz2f79u3ExsayYMGCfgm/IAhoituR76lC36DC1t8J77sScBhseRauVirI2rqJvB+3YdTrSZoynXELbsfNx89iP3WlHWRsLafhdBeu3g7ccE8CcWP8sTnH7kFXWUnl3Xf3eQwgir+IiMgAYzR2U1OzhqrqVRgMXfj5zSQocPF5Szbt7f1xcoq8oveh1WoxGo09r0+fPs2WLVuIjIzs93p9zekO5Luq0NUokHo74LVkEI5DfS2brqm7ydmxhezt36HTqImfcD0TFt2BZ2CwxT6aKuVkbCmjprgDJ3c7Ji+NI2FiEFLb89f262rrqLr3PjAYLbR0cUTxFxERGRBMJi11dV9TWfUBOl0r3t5TiY76E66ug6/6vaSlpbFnz54LjoeFhfVr2aa2So58VyXa8i6k7nZ4zI/BeeTFTdfyd+0gc8u3aBRyYkaPY+Liu/AJi7DYR1udkoyt5VQUtOLgLGPCghiGTA7G1u7CpxN9UxPVy5djUqkIX7MaEhL6NB4QxV9EROQyMZn0NDRupqJiJVptA54e40ge8gHu7iN+kfs5evQoe/bsYdCgQURFRfUct7W1JSkpCTu73nfU9oauXol8dxWaknZsXGS43xqFy9hAJLLeRd9o0HNs326OfrcBVUc74cnDuW7J3QTExFnso7Opm8ztFZzKbsLOXsqY2ZEMvSEUO4fe5dnQ2kr18nsxdnQQ9sXnOMTHWz2ecxHFX0REpF8Igommpu2UV7yFWl2Fm9swEhNeu+ord84lOzubH3/8kfj4eBYtWtTvZK6+uRv5nirUx1qRONjidlMELhOCsLHvvT2T0ciJQ/tJ//Zr5C1NBMcncusfniYkMcliH4p2DVk7KihJb0RqK2HEjHCGzwjDwdmCx48goNizh+bXX8fQ3ELYJx/jOKT/VtYDJv4Ss/FGNlAnCMKtEokkElgPeAM5wN2CIOgGqj8REZFfBrPp2h7Kyt9EpSrFxSWe5ORV+HhP+0VM136ioKCgJ5nb31U8hnYN8r1VdOc1I5FJcZ0WiuukEIsVtASTidKMNI5s/Ir2+lr8o2KYvuJRIoaOsLzip0tLzo9VHD9UB8CQycGMuDkcZ/feN3QJgoDq8GFa3nobzfHj2EVEELbqI5xGjuzz+M5lIGf+TwLFgNuZ168BbwqCsF4ikXwI3A98MID9iYiIXGV0unYKCh9ALs/HySmSpMFv4+c3E4nklysHrtfrycjIYN++ff1O5hrlWuQpNaiyGkECLhODcZ0SgtTFsulaRV42hzespaWyHO+QMOb8+Tlixoy3KPoalZ683dUU7q/BaBBIGB/AqFmRuHo5WLyv7qwsmt9+G3V2DrKgIAJffhn3uXOQnBlfq7qVT4992qex/sSAiL9EIgkBZgEvA3+WmEc/DbjjzCmrgRcRxV9E5FfNqVMvoVAcJyH+VQICbsPG5peLHBsMBvLy8khNTUWhUBAXF8fChQv7lMw1qvQoDtSgTG8Ak4DzaH/cpoUhtTALB6guKuTwhjU0lJbg7h/ALY//hfiJ11s0XdNpDBTsqyF/TzU6rZHYUf6MuTUSD3/LNhbqY0W0vPUWqrQ0bH198X/heTwXLkRyJl/Rpe3i86LPWVeyDp2xfwGVgfrNvQU8Dfy0Pc0b6BQEwXDmdS1geW2TiIjINU9r2wEam7YQGfEHgoIWXdW+8/PzaWpq6nktCAIlJSV0dnYSFhbGggULiIiIsLo9k8aAIrUW5eF6BL0Rp+F+uN0Qhq23ZdO1+tIS0jaspbqoABcvb2584HEGT5mO1MJThkFn5NjBOnJ/rEKj0hM51Iexc6LwDrZcC0BTWkrrypUo9uxF6u6O31//iucdS7E5UzRGpVex9sRa1hxfg1Kv5JbIW3h02KNEYP3Yf+KyxV8ikdwKNAuCkCORSKb04/oHgQfBvAxLRETk2sNgUHGy5HmcnGKIiHj4qvadmppKSkoKMpnsvJCKr68vs2bNIiYmxupcg0lnRHmkHsXBWgS1AcchPrjdGI7Mz/IsvLmynLSNX1Kek4mjmztTlj3A0BtvwdbCqiGjwURxWr3ZdK1LR2iiF2PnROEf4dbr+QC6qipaVr6LfMcObJyc8Hn8cbyW34P0TNEYjUHDhpMb+PTYp3RoO5gWOo3Hhj9GnKflVUSXYiBm/hOBORKJZCbggDnm/zbgIZFIbM/M/kOAut4uFgRhFbAKYNSoUcIA3I+IiMgAU17+BhptAyNHbsDG5upZLR85coSUlBSSk5OZN28eNv0sYiIYTCgzGlDsr8Gk1OMwyBO3GRHYXWQW3l5fy5GNX3Ey/RD2zs5cd/syht8yGzuH3p8OTEYTpZlNZG6vQNGmITDanRvvH0xw3FnrBl1tLd0Zmeddp87Po3Pzd0hkMrzvvw+v++/H1tN8jd6oZ/OpzawqXEWzupkJQRN4YvgTJPlYXkVkLZct/oIgPAs8C3Bm5v+UIAh3SiSSb4CFmFf83ANsudy+RERErj5dXXnU1K4mJPguPNwvb4VJX8jKymL37t0kJiYyd+7cfgm/YDTRndOMfF81xi4t9lHuuN0Vjn2EZdO1ruYm0jd9zYmDKdja2TH2tiWMmn0bDs69f1EIJoHTuc1kba+go7Eb3zBXJi8dRNhgr/OeSDSlpVQvuwdjZ+f5DchkeN5+O94PPYjMz2z3YDQZ2V6+nQ8KPqBOWccIvxG8dv1rjAoY1efPwBJXMlvzN2C9RCJ5CcgD+peSFhERuWoYjRpUqlPA2Yfw4pJnsbf3Jzr6L1es35aWFnS6s4nL2tpafvjhB+Li4pg/f36fl20KJgF1YQvyPVUY2jTIQl3xXBiLfczFTdeObl5P4d5dSGwkjJg5mzFzF+Hk7tF7H4JAVVEbGVvLaa1R4hnozM0PJhE13PeCPrQVFVTfdz8SOzsivvkGW6+zTwM2rq5I3cwhIZNgYk/VHt7Lf4+KrgoSvBL4x/R/MDFoouXQllbRp8/mJwZU/AVBOAAcOPNzOTBmINsXERG5MphMWurqN1BZ+T46XcsF7ycnr8LW1rIv/eWQkpJCamrqBcejoqJYtGhRn5ZtCoKA5kQbXburMDR1IwtwwntZIg4JXhfNC3Q2NrDhxb/RLe8iaeqNjJt/O67ePhbPrz3ZQcaWMhrL5bj5ODB9eQKxYwKw6cXjR1dbS/Xye8FkImzNauzP2XV87n0fqjvEu3nvUtxeTLR7NG9MeYPpYdMvns/orIbPZ178Q7GAuMNXROR3jMlkoPGMNYNGW4+Hx1jiYp9HKj0b17az98PN9fJjzL2RmppKamoqQ4cOJTExsee4VColIiLCauEXBAHtqU66dleir1Vi6+OI19JBOA6xbLr2E/KWZjb+5zkMBgN3vvImfhEXivNPNJZ3kbG1nNqSDpw97Jl8xyASJgYiteTx09BA9T3LETQai8Kf2ZDJyryV5LfkE+ISwivXvcLMyJlIL1WvV14Pq+eAVn7x8ywgir+IyO+Qs9YMb6NWV+Lmmkx8wn/x8rxIeGGASU9P70nm9jemD6Ct7KJrVyW6CjlSD3s8F8TiNMIfifTS41C0t/LNf/6OrrubRS+8YlH4W2sVZGytoLKwFUdXGRMXxpA0ORhbWe8CLeh0dG7eTOt772NSqwn7/HMcBg0675zClkLeyXuHjIYM/Jz8eGH8C8yLmYfMmoL1yhZYMxdULbBsCzw7+tLX/AxR/EVEfkeYrRn2Ul7+JkrVSZyd40ge8iE+PpcILwwwWVlZ7Nq167KSubpaBV27q9CWdmDjIsNjTjTOYwKQ2FrXVndXJ9/+5x+oujpZ+Pf/4B8ZfcE5HY0qMrdXcDq7GTtHW8bOiSJ5WohF0zXBaKRr2zZa330PfW0tjsOH4/+Pv+M4+Kyz6cn2k7yb9y4Hag/g5eDF06OfZvGgxdhbW7C+u90s/J01cNcmCOlfElgUfxGR3wGCINDekUZ5+RvI5QU4OkYwOPFN/P1vvarWDCqVisOHD5Oent7vZK6+SYV8dxXq423YONnifksEzuODsOnF+rg3BEGgIj+bA2s+RdHawoJn/0VQ3PnOmPJWNVk7KzmZ3oDUTsrIm8MZduNFTNdMJhS799CyciW6sjLsExMIXfURzpMm9XypVnRV8H7++/xY+SOuMleeGP4EdyXchZPMyoL1ggBlKbDr79BeDndsgIj+m+iJ4i8i8hunszObsvI36OzMwN4+kIT4/xIQMP+qWjNoNBrS09NJT09Hp9MxbNgwZs2a1adkrqFNjXxvNd35zUjspLjeEIbrpGBsLMzCe6PmeCGH16+lvrQYdz9/bvvbP89z3lR1acnZWcnxw/VIJBKSp4Yy4uZwnNwse/yoUlNpfvtttCeKsYuOJvitt3CdcSOSM08z9cp6Pij4gK1lW7GX2vPAkAe4Z/A9uNtbXm56AVXpkPIfqEoD91BYug6iL6/8pSj+IiK/UfR6OSdO/IXWthTs7HyIi32B4ODbr+omLZ1OR2ZmJmlpaajVahISEpg6dSp+fpbLF/4cQ5cWxb5qVNlNYCPBZVIIrpNDkF7E+rgsO4PitIOYDIae46quDhpKS3Dx9GL6ikdJmnojUltzGxqlntxdVRw7UIvJKBA/MZDRMyNw8bRsuqbKyKTl7bdR5+YiCw0l6LVXcbv1ViRnnmRaulv4+NjHfFP6DTbYcGfCndyfdD/ejt5Wj536PEh5CU7vBWc/uOV/MPIesL3836Eo/iIiv0EMBiX5BfehUBQRHfVXQkOXIZVaGV4YkP4N5OTkcOjQIZRKJTExMUybNo2goCCr2zAqdSj216DMaAABnMcG4DY1FKmbZevjqsI80jaspbHsFM6eXji6nrVUsJFKmXz3/QydMROZnbkNndpA/t5q8vfVoNcaiRtjNl1z972I6Vphodl07Ug6tn5+BLz4Ih4L5iM5YyjXqenks6LP+LrkawwmA/Ni5/FQ8kMEOAdYPXaaS2D/S1C8DRw8YPqLMOZBsHO2vo1LIIq/iMhvDKNRTUHhgygUhSQlrcTP9+oVSTcajRQUFHDw4EG6uroIDw9n0aJFhIeHW92GqVuP4lAdyrQ6BL0JpxH+ZtO1i1gf15Wc4PCGNdSeKMLV25cZD/2BwZNvwMZCPkGvM3Jsfy25u6vQqgxEDfdlzOxIvIPO7uLVnDyJYvcec6z9p2MlJShTUpB6euL3t7/hufR2bBzM96XUKVlzYg1rTqyhW9/NrVG38sjQRwh1C7V67LSXw4HXoHCDWegn/w3GPwYOfQgRWYko/iIivyFMJi2Fxx6hszOTwYlvXDXhN5lMHD9+nAMHDtDW1kZQUBCzZ88mOjraetM1rRFlWh2K1DoEjQHH5DOmaxeZhTeVnyZtw1oq8nNwcvdg6vKHSJ5+M7YWbJ2NehPHD9eT80Ml3XIdYYPNpmt+4eebrqmPFVF9772YlMrzjtu4u+P75B/wvHsZUhfzLFxtULO+ZD2fFn1Kl7aL6WHTeWzYY8R4xlg1bgC66iD1f5C3FmxsYcLjMPFP4NyHEFEfEcVfROQ3gtGopuj4H2lvP0RC/GsEBMy54n0KgsDJkyfZv38/TU1N+Pn5sWTJEuLj460WfUFvQnm0AcWBGkwqPQ4JXrjdGI5dkGXTtbbaatI2fsmpjCM4OLsw6Y7lDL/pVmQOvT8dmIwmSo42krWjAmW7lqBYD256MImgmAutGzQnT1K9YgVSd3eitm1FFhjYa5s6o45NpzaxqnAVrepWJgZP5InhTzDY+yIF6+UNUHP0/GM1WZD1CQgmGLkcJj0Fbr332Rs17d1Wn3suoviLiPzKMVszbKSy8j10uhYGxf2LoKCFV7RPQRAoLy8nJSWFuro6vLy8mD9/PklJSVav2ReMJlTZTSj2VWOU67CP8cBtRjj2YZatjzubGkn/5itOHD6AzN6BcQuWMurWedg79R4LF0wCp3OaydxeQWdTN37hrky9K55QC3YP2vJyqu+7HxsHB8JWf9Gr8BtMBraVbePDgg+pV9Uz0n8kr09+nRH+lyhY33oaPr8FVM3nH5fYwNCl5hCPp/XhMYCiui7u+PjopU/sBVH8RUR+pZitGb6novIdNJo6PNxHk5S0Ek+Pvu/27AvV1dWkpKRQWVmJm5sbs2fPZtiwYVav1xdMAt35zcj3VmNs12AX5ornkkE4RPduoAagaGvl6Ob1FO3fg42NlFG33sboOQtwcus9Fi4IApWFrWRsraCtTolXkDO3PDyEyKE+Fp9IdDU1Zg8eiYSwLz7HLiTkvPdNgoldlbt4P/99KuWVJHkn8c/x/2R8kOXSjT10VMGaOebZ/T3bwfkc3yBHT3DtQzL4DKVNCpZ9lomrg/WVy85FFH8RkV8ZgmCiuXkn5RVv091djqtrEvGDXsLLa9IV36WbnZ3N9u3bcXZ25uabb2bkyJFWl00UBAF1UZvZabO5G1mgMx7LB+MwyNPifXd3dZK55Rvyd+9EMAkMueFmxt22GBev3mPhgiBQW9LB0S3lNFfKcfd15Mb7EokZ5d+r6RqAUamk/YvVtH/xBRJbW7MHT2TkeW0erD3IyryVlHaUEuMRw1tT32JaqJUF67vqYPVs0Klg+XYIGHLpay5BRauKOz/JwNZGwlcrxhL5bN/bEMVfRORXgiAItLalmK0ZlMU4O8cyZMj7+PrMuCrWDPn5+Wzfvp3Y2FgWLVqEnYVKVj9HEAQ0pR3Id1ehr1Ni6+uI1x3xOCb5WDRd06iUZG/7jtydWzDodCReP43xC5fi7udvsZ+Gsi4ytpRRV9qJi6c9U++KZ9D4AIumaya1mo5162j7+BOMnZ243jgd3z//+TzhP9pwlJW5KylsLSTMNYxXJ73KzRE3X9p07SeUzeYZf3c73LNlQIS/pr2bOz4+iskksOGhcUT49G/5pyj+IiK/Atrb0ygrfwO5PB9HxzAGJ75xxpqhb9YI/aWoqIgtW7YQGRnJ4sWLrZ7ta8s76dpdha5SjtTTHs+FcTgN97NouqbTqMn7YRtZ2zahVamIGz+JCYvuwDvY8nLJlmoFGVvLqSpqw9FVxnWLYxk8Keiipmsd33xD24cfYWhpwfm66/B98kkch5zd6ZvfnM/KvJVkNmYS4BzAi+NfZE7MHOtM1wBMRjj2rXmtvqoV7toMwZdXCEdvNPFNdi1v7S1Fozey/sHxxPj132ZbFH8RkWuYzq4cysveoKPzKPb2AcQPepnAwAXYWCtCA0BJSQmbN28mNDSUpUuXWiX8uhoFXbsr0Z7qxMbVDo+50TiPtmy6ZtDpKNjzA5lbvqG7q5OoEaOZuOTui9ortzeoyNxWTlluC/ZOtoybF0Xy1FBk9hZE32Cga8tWWt97D319PY6jRhL85hs4jTprjFbSXsLKvJWk1qbi5eDFM2OeYVHcIuyk1j3lIAjmjVn7X4GWYvAfAvM/gbCx1l3fC0aTwNaCOt7ae4qqtm6Gh3nw0rwkEoMsJ8atQRR/EZFrEIXiBGXlb9DWth+ZzJvY2H8QHHQHUmudH/uBSqUiLS2N8vLy8463tLQQGBjIHXfccclQj75RRdfuKjQnzpiuzYzEeVygRdM1o8HA8QN7Sd+8HmVbK2FJyUx86u8ExSVY7KOrRU3WjgpKMxqxtZMyamYEw6aHYu90EdO1H3+kZeW76CoqcEhKIuBf/8L5urP21eVd5byX9x67q3bjZufGkyOe5I74O/pmunZ6n9l/pyEffOJg0ReQMBf6W3dYENh1vJE39pRS2qQkIdCNz5aPYuogvwEJ84niLyJyDaFSlVFe8RbNzTuxtXUjOuopQkKWYWs7cNv6f45Go+HIkSMcPXoUvV5PZGTkebP7wMBAZsyYgYOFNfQA+lY18j1VqAtbkNhJcZsehst1lk3XTCYjJWmppH+zjs6mBgJjB3HLo38iLGmoxT6UHVqyf6ik+HA9EqmEoTeEMuKmcBxdLZuuKfcfoOWdd9CWlGAfG0vIuytxueGGHvGsVdTyQcEHbC/fjoPUgYeSH2LZ4GW42fVhVl2ZZhb96nTwCIO570PyEpD2T14FQeBgaQuv7y7lWF0XUb7OvHvHcGYmBVpMWvcHUfxFRK4BTCYtJ0++SH3Dt0ilDkREPEZY6Apksst7tL8YOp2OjIwM0tLS0Gg0JCYmMnXqVHx9fa1uw9CpMTtt5jYhkdrger3ZdM3G0ixcEDidmU7axi9pq63GNzySeU+/QNSI0RZns2qFjpxdVRQdrEMwCiReF8TIWyJw8Tz7FNSdm0vnxm/MSynPoC2vQHPsGLKwMIL+9z/cZt7SY7rWpGpiVeEqNp/ajNRGyt0Jd3PfkPvwcvCyeuzU5ZhN18pSwCUAZr0Ow5eBrZUhol7IKG/j/3afJKuygxBPR/63MJnbhgdjayFpfTmI4i8i8gtjMuk5VvQHWlv3Ehp6LxHhj2Bnd+W29ev1+h7TNZVKRWxsLNOmTSPQwk7W3jAqzjFdA1zGBeE6NRTpRWbhlQW5pG1YS1P5aTyDQrj1j38jbuzEHuvjn6Pt1pO/t4aCfTUYdEYGjQ1g9K2RuPk4nnded04O1SseQCKT9RRCB7Bxdibg3//C47bbekzXOjQdfHrsU9afXI/RZGRB3AIeTH4QPyfrXUZpOm6O6ZdsB0cvmPESjF4BMsdLX2uBgppO/m/3SQ6dasXP1Z7/zB3MktFh2FlZmKY/iOIvIvILIghGjp/4C62te4mL+yehIcuuWF9Go5H8/HwOHjyIXC4nIiKCJUuWEBYWZnUbpm49itRalGnWTonTAAAgAElEQVT1CMYzpmvTw7D1sBwSqj1RxOENa6grOYGbrz83PfJHEidNtWy6pjVSuL+GvN3VaLsNRI/wY8zsSLwCLwx9qY8do+bBh5D5+xP+5VpsfXovuq7QKVh9fDVrT6xFY9T0mK6FuIb0ej4Arafg5M7zjN1oLISizWDvClOeg3GPgIP1T2fFDXIOlracdyy3qoPdJ5rwdJLx3Mx47h4XgaOVhWkuB1H8RUR+IQTBRHHxszQ37yAm+m9XTPhNJhNFRUUcOHCA9vZ2goODmTdvHlG9FBO32IbWgPJQHYpDdQg6I47JvmbTNR/Ls93G06Uc3rCWqsI8nD29uOG+Rxhyw4weD/2fY9AbOZ5aT86PlagVesKHeDN2dhS+Yb0vZ9SUlFC94gGknp6EffF5r8Lfre9mXck6Pi/6HLlOzozwGTw27DGiPC4x9qYT8MVMUHecf1zmBBOfNP9z6kOICMip6uDuTzPo1hnPO+5qb8ufpsdx33UR/d6t2x9E8RcRuQqYTDo6O7MwCfqeYy3Nu2ho3ERk5B8JD3/wivR78uRJ9u3bR3NzM/7+/ixdupS4uLg+mK4ZUaafMV3rNuCQ6I37jHBkAZYT0K3VlaRt/JLTWUdxcHXj+rvuY9iMmcjse386MBpNlBxpIHtnJcoOLcGDPBg7J5rAaMs2xprSUqrvvQ8bR0fCvvgCWcD59ghao5ZvTn7Dx8c+pl3TzvUh1/P4sMdJ8La8iujsAE6ZN2bZOsBjWeB+ztOBVGb+10eO1Xax/LNM/Fzt+XLFWLydz+YrZFLJFYnpXwpR/EVErjAmk5bCwodpa0+94L3wsIeIjHj8ivR75MgRdu/ejbe3NwsXLiQxMdF60zWDCVV2I/J9NZgUOuxjPXCfEYFdqOVNRR2N9RzZ+BUlR1Kxc3BkwqI7GTFzLvZOvS+XNJkETmU1kbW9gq4WNf6Rbky7J4HQeMszan1TM60ffkDnt5uQergT/sXn2IUEn33fpGfr6a18WPghjapGxgSM4YnhTzDMb5hV46a9AlafcUNdthV846y77iKcbFRw92cZuDnK+OqBcQR79D83MJCI4i8icgUxmfQUFT1JW3sqsTF/x939rPOjVOqEs3PsFbFmyMrKYvfu3SQmJrJgwYK+ma7lNSPfW4WxQ4tduBvuSwdhH2XZdE3e2sLRTV9TdGAvUlsZo+csYPTs+edV0TqvD0GgIr+VjG3ltNer8A52YeajyUQM8bb4WRg6Omhb9TEd69YhGI14LFyAzyOPIvM3J2pNgokfKn7g/fz3qVZUk+yTzH8m/odxgeOsGjcAXbXmGb9BDct3DIjwl7UoufOTo9jb2rDugbHXjPCDKP4iIlcMQTBy4sRTtLTuueLJ3HPJy8tjx44dxMXFMX/+fOuF32Ci7atiNMXtyIJd8JgXg0OcZdM1VWcHGd9vpHDPDwAMmzGLsbctxtnDs/f2BYGaE+1kbC2nuUqBh78TM1YMJmaEn0WPH6NCQfvnn9P+xWpMGg3us2fj8/hj2IWG9rSZUpPCu3nvcrrzNHGecayctpLJIZOt/1LVq81++offBKMe7tkK/hfx5LcCpdbAZ4cr+Di1HHuZDV+tGEe495Xbq9EfRPEXEbkC/JTMbWrefkWTuT/n2LFjbN26laioKBYtWoStrXV/4oJRoH3DSTTF7bjfGoXLxCDL6+6VCrK3biL3x20Y9XoGT57O+IW34+Zjeblk/alOjm4po+F0F65eDkxbFs+gsQHYWDJd6+6m/cuvaPv0U0xdXbjedBO+f3gC++ho8/0KAun16azMW0lRWxERbhH87/r/MSNiBjYSK+PnBh3krYHU/wNFA0RNNS/bDEi69LUW0OiNrE2v4oODZbSrdMxI9OfZmQlE9tN87Uoiir+IyACjUBRTVvb/aGtPJTLyySuWzE1LS+Pw4cOYTOdsbNJqCQ8P5/bbb7featkk0PFtKepjrbjPisL1uuBez9Opu8nZuYWc7d+jVXcTP+F6xi+8A6+g3s8HaK6Sk7GlnOoT7Ti52XH97XEkTgxCKrMg+jodnes30LpqFcbWVpwnX4/fk0/ikJjYc05uUy7v5L1DTlMOQc5B/HvCv5kdPRtbGyvlzGQ018g98Cp0VkHoOFjwCURcZ931vaAzmNiQXcO7KadokmuZFOvDUzMGMTTUcrjsl0YUfxGRAUKlKqe84s0z1gyuxMb+g9CQ5Vekr/T0dPbs2UNUVNR5O3IdHByYMGFCn+yWO787TXdeM243heM66UIh1+u0FOzaQeaWb1Er5ESPGsfEJXfhGxZhsd22eiWZWysoz2/B3tmW8fOjGTIlBJmF9euCwUDnd9/R+v4HGBoacBozBt933sFpxPCec463HWdl3krS6tLwcfThubHPsSB2gfWmayYTFG8xb9BqLYXAoeZduTHToZ95F6NJ4Lu8Ot7eV0pNu5pR4Z68fftwxkVduU16A4Uo/iIil4laXUtFxTs0NH5ntmYIf5SwsBXIZJaXKl4OWVlZ7Nq1q8/JXF29EsXBWoxd2p5jgtaIvkGF69RQ3Kaev9nLaNBTtH8PRzetR9nRTnjycCYuuYvAmEEW++hs7iZrewWlWU3I7KWMvjWSYTeEYud4VmqUhw7R9vEnCMaz690NDQ3o6+txSE4m6OWXcBp/tjrW6Y7TvJf/Hnur9+Ju786fR/6Z2+Nvx9HWyuSpIMCp3WYrhsZC8I2HxWsgYU6/Rd9kEvihqJE39pykrEVFUrAb/743iSlxvleltsJAIIq/iEg/0Wqbqax8n7r69UgkEkJDlxMR/hB2dr3vMh0I8vPz+5zM1bd0nzFda0XiIMUu+GxhdImTLW43R+A6+exadpPJSPGhA6R/u46u5iaCBiUy8w9/JTTRciESRbuG7J2VFB9pQCqVMPzGMEbMCMfB5fzQkzItjdpHH8PW3x/ZOWUS7WNj8f/H33GZOrVHPGvkNbxf8D47ynfgJHPi0aGPcnfi3bjYWS7sfgEVh8ymazUZ4BkBt62CIQvB2mIsP0MQBPafbOb13aUcr5cT6+fCB3eO4OakgF+N6P+EKP4iIn1EEEyUV7xNdfUnCIKBoMBFREQ8hoOD9d44l0Kr1ZKTk0N7e3vPMYPBQEFBgdXJXEFvpHNrOarsRiQyG1ynhuI6Kdii6RpAbclx9qx6l/a6Gvwio5n/zCNEDBtpucyiXEfOj5UcT61HEASSrg9m5C3hOLtfaD3dnZVF7WOPYxcVRfjqL5B69B4Pb1Q18lHhR3x/6ntsbWxZnrSc+wbfh4fDReLn9XmQ99V5xm60lkLlIXANglvfguF39WmDVmZFO9sK6hE4a+9wol5ObnUnYV5OvLF4KHOHBSMdQKfNq4ko/iIifUAQBE6W/ou6ui/x959NVOSfcHIKH7D29Xo92dnZHDp0iO7ubpx+tkEqLi6OBQsWXDKZKxhMtK4tRnuqA5cJZ0zXXC4eG68rOcHmV/6Js4cns//8LLFjJlgUfY1KT96eagpTajDqTcSPD2TUrAjcvHsPxagLCqh56GFkwcGEffZpr8Lfpm7jk2OfsPHkRkyYWDRoEQ8MeQBfp0u4jNblwOq5IBjN9gs/Ye8CN70Co+4HmWXvod44crqVe7/IQmojwfGcimDujjJevi2JxaNCkf0Cu3IHElH8RUSsRBAETp/+L3V1XxIe9iDR0U8P2KO+IAjk5eWxf/9+FAoFUVFRTJs2jZCQixiPWWrLaKLt6xK0pR14zI/BZcyln0gay06x+dUXcfHyYsmLr1lcq6/TGChMqSFvTw06tYHYUX6MmR2Fh7/loifduXnUPPwwUh8fwj77DFvv85OhXdouVh9fzZfFX6I1apkbPZeHhz5MkEvQpQfbWARr55t9du79AdwtrzyyluzKdlasySbc24n1D47Hy7n/Fs3XMqL4i4hYSXnFW1TXfEpIyLIBFX6AgwcPcuDAAUJCQpg/fz6R5xQR7wuCSaB9Yyma4214zI6ySvhbqirY9PLzOLi4svAfL/cq/AadkaLUOnJ+rEKj1BOR7MPYOZH4hFi2e9CePk3L2++g2LMHWVAQ4Z9/1rMjF8yma18Wf8kXRV+g0Cu4JeIWHh32KBHuEdYNtqUU1sw1z/bv2Togwl9Y28m9n2cR4ObAlyvG/maFHwZA/CUSSSiwBvAHBGCVIAhvSyQSL2ADEAFUAosFQeiw1I6IyLWCyWRAoTiGSTD0HGtvP0xl5bsEBS4mLvb5ARX+tLQ0Dhw4wNChQ5k7d67V/js/RzAJdGw6hbqgBfdbInCZeGkxbKut4duXn8fW3p7FL7yMm8/5IRajwUTxGdM1VaeWkHhPxs6NIiDS8komXXU1re+9R9fWbdg4OuLz6KN43bscqav5i0Jr1LKhZAOfFn1Ku6adKaFTeHzY4wzysryK6MIbLzNbMUhs4J5t5mTuZXKiXs7dn2bi4SzjqwfG4ufat1DRr42BmPkbgL8IgpArkUhcgRyJRLIHWA7sEwThVYlE8gzwDPC3AehPROSKIAgmmpp3UFHxNt3dFRe8H+A/l/j4l5BYu4PUCjIzM9mzZw+DBw/ut/ALgoC6qA35nioMzd243hCG6+TQi17T3dVJ5pZvyN+9E3snZxY9/wrufmedMU0mgdLMRrK2VyBv1RAQ5c6N9yYSPKj3cBCAvrGR1g8+pHPTJiRSKV733ov3Ayuw9TRfozfp+e7Ud3xU+BHN3c2MCxzHE8OfINk32frBdrebbRgyPzYXT1m+A3xirL++F5rlGt7df5qvM6vxcbFn3YpxBLpfOx48V4rLFn9BEBqAhjM/KyQSSTEQDMwFppw5bTVwAFH8Ra5BBEGgtXUf5RVvolSW4Owcx+DEN85bsmljY4+7+3AkkoErspGbm8vOnTsZNGgQ8+fP77PwC4KAprQD+e4q9HVKbP0c8bozAcckyxuMNCol2du+I3fnFgw6HYmTpzFh0R091gyCSaAsr4XMbeV0NHbjE+rCrMeSCU86a7pmUqsR9GetqU0qFe1frKbj668RBAHPxYvxfuihnhCP0WRkZ8VO3s9/n1plLcN8h/HqpFcZHTDa8uD0GjBozr42aCHnczjyLuiUkLwYpj53WTP+DpWODw+WsTq9EoNRYNGoUP44PRZ/t9/2jP8nBjTmL5FIIoDhQAbgf+aLAaARc1hIROSaQRAEOjqOUFb+BnJ5Po6O4QxOfBN//1kDKvI/p729nYMHD1JQUEB0dDSLFi2yeqPWT2jLO+naVYWuSo7UywHPRXE4DbdskKbTqMn7YRtZ2zahVakYNH4SExbfiVeQOaEsCAJVRW1kbC2ntUaJZ4ATNz2QRPRw35429XV1tLz/Pl3fbwHj+QVJsLHBfd48fB59tMdiWRAE9lbv5b289yjrKiPBK4H3bniPScGTLIfNlC3mmX3WJ2DUXvh+wmyY+nfws8KX3wIKjZ5PDlXw6eEKVDoDtw0L5snpsdec8dqVZsDEXyKRuACbgD8KgiA/95crCIIgkUgEC9c9CDwI9KmcnIjI5dDZlUNZ2et0dmZgbx9IfPwrBAbMx8bmylVSksvlpKamkpubi42NDRMmTGDKlClWm68B6GoUdO2uRHuqExs3OzzmxeA8yh+JhVqvBp2Ogj07yfj+G9TyLqJGjmHi4rvwizhbyaruZAcZW8tpKOvCzceBG5YnEDcmAJszom9oaaH1w4/o2LgRCeC5ZDF24ecsb5XY4HzdddhHmZPUgiBwuO4wK/NWUtxeTKR7JK9Pfp3p4dMtm66pO+DISjj6odlSOfl2CPjZprLwCRBkpS9/b13ojKxOr+TDg2V0duu5eXAAf54RR5y/5aT1b5kBEX+JRCLDLPxfCYKw+czhJolEEigIQoNEIgkEmnu7VhCEVcAqgFGjRvX6BSEiMlAoFMcpK3+DtrYDyGTexMU+T1DQUqTSCzclDRQqlYrDhw+TlZWFyWRi5MiRTJo0CTc362u/6htVdO2uQnOiDRtnW9xnReIyLhDJOWvQKwtySfn8I/Tas+ESnVqNTt1NWNJQJi65m6C4+J73mirkHN1SRm1JB87udky+YxAJEwKRnvNFIv/xR+qfeRZBr8dj/nx8Hn0E2UUKvWc1ZrEybyV5zXkEuwTz8nUvMytyFlJLO2q1Ssj4wCz8mi4YPN8czvGJtfqzuRRag5H1mTW8u/80LQotk+N8eWrGIIaEXBn7jV8LA7HaRwJ8ChQLgvDGOW9tBe4BXj3z3y2X25eISH9RqU5TXv4WzS0/YGvrTnTUXwkNXYZUanl9+uWiVqtJT0/n6NGj6PV6hg4dyuTJk/H0tJw0/Tn6VvUZa4YWJPZS3G4Mx+W6IGzsz//TrTleyJb/vYSbrx8RQ0f2HLeR2jBo/CTCkob2HGutVZK5rZyKglYcXGRMWBDDkMnB2P7MdE2xbx91T/0Vx+Rkgv77yvmz/Z9R1FrEO7nvkN6Qjp+jH8+Pe57bYm5DZmlHrV4D2Z/CoTeguxXibjaHcwL7kPy9BAajic25dby97xR1nWrGRHrx/p0jGB3Rt9q7v1UGYuY/EbgbOCaRSPLPHHsOs+hvlEgk9wNVwOIB6EtEpE8IgpGTpf+mrm4dUqkjERGPExZ6PzKZ9bPuvqLVasnMzCQtLQ2NRsPgwYOZMmXKee6bP8ekNdC1owJD5zlxbqMJbUUXEqkNrpNDcb2+d2uG+tJivnvt37j7B7D4n//Fya33GW1nUzeZ28o5ldOMnb2UMbMjGXpDKHYOF8qA8tBh6v74JxwSEwld9RFSl979dEo7Snk371321+zH096Tp0Y9xZJBS3CwvUjStCIVNj8EinqInAzTnofQiyR/rWB/STNr0isxnRM7qGxTUdXWzdAQd/47fwiTYn1+df47V5KBWO1zGLD0id5wue2LiPQXc0GVZ2ho3ExIyN1ERjyBnd2Vs9rV6/Xk5ORw6NAhVCoVcXFxTJ06lcCLhEkATDojbatPoK3sQhbkcp7TpMv4IFynhCJ17X2zUVP5aTa98k+cPT1Z+I+XehV+eZua7B2VlBxtRGorYcSMcIbPCMPBufdZuSojk9rHH8cuJoawj1f1KvxV8irey3+PHyt+xFnmzGPDHuPuxLtxll0iaVp1BNYtAfdQuG0rRE2++PlWkFLSxENrc/B1scf3nJU6IZ6OPDczgRmJ/qLo94K4w1fkN4nZg+efNDRuJjLyj0RFPnHF+jIajeTn53Pw4EHkcjmRkZFMmzaN0NCLr7WHM6UT155AW9GF15JBOA2zXA3r59QcL2TrG//FwcWFRc+/jIvn+eEMVZeWnB+qOH64DoAhk4MZcXPvpmtg/syUBw5Q95enkIWGEPbpJ0jdz/8yaVA28GHhh2w5vQU7qR33D7mf5YOX425vRfy8Nge+WgxuwbB8O7hYP1ZLpJ1u5eEvc4kPcOOrB8bi5nDlEva/NUTxF/nNIQgCp06/TF3dOsLDHyYy4vEr0o/JZKKoqIj9+/fT0dFBSEgI8+bNIyoq6tIXc8aD56titKc68VwQa7XwN54u5fCGtVQV5uHm68ei5185r4SiRqknb08VhSm1GI0CCeMDGDUrElcvy6GY7qwsmt96G3VODnbR0WYPHq+zXyat6lY+LvyYb0q/AeD2+NtZMWQFPo5W2lc3FMKXt4Gzt9mKYQCEP7OinRWrs4nycWbNfWNE4e8joviL/KoxmfS0tqZgNKp6jnXJ86mr+4qQkHuIjnpqwB/5BUGgpKSElJQUWlpa8Pf3Z+nSpcTFxVndl6A30v5NKZridjzmRuM8OuCS17RWV5K28UtOZx3FwdWNyXfdx9CbZiGzM8/kdWoD+ftqKNhbjU5rJHaUP2Nujbyo6Zr62DFa3nobVVoatr6+BPzzBTwWLEByphJYl7aLz4o+4+uSr9EZdcyLmcdDyQ8R6HKRUFZtNrSeOvvaqIN9/wI7V1i2FdysMGw7B0EQyKxop7ZD3XOsW2/ktR9KCPRwYO39Y/H8DXvwXClE8Rf51SIIRo6f+AvNzTsueC84aOmAe/AIgkBZWRkpKSnU19fj7e3NwoULSUxMtHp3rmAwocpqRJ5Sg0mhw31mJC7jLy6GHY31HNn4FSVHUrFzcGTC4jsZOXMudo5mUTfojBw7UEfurio0Kj2RQ30YOycK72DLRU80paW0vPMOyr37kHp44Pf003jesRQbB/PTgVKnZG3xWtYcX4NKr+KWSLPpWrjbReyr63LM1bLKUi58zzXQPOP37Jv9dUZ5G/+3+yRZlRfagoV7O7FuxTh8Xa/cMt3fMqL4i/wqMSdzn6W5eQfRUU/h7z+r5z2JxBYHh77NLi9FVVUV+/bto7q6Gg8PD+bOnUtycrLVO3MFo0B3XjPyfVUYO7TYRbjhvjQe+yjLsXJ5azNHN62n6MBepDIZY+YsYNScBTi6mDclGQ0mThyuJ/uHSrq7dIQmejF2ThT+EWdXMumqqzEplT2vTRotHevWId+xAxtnZ3z+8ARey+5B6mJO1GoMGtaXrOfTok/p1HZyQ9gNPDbsMWI9L7LuvukE7H8ZSraDoxfMeAniZ3HeOhAXf7CzflltYW0n/9t1kkOnWvFztec/cwdzfZwvknPa9He3x9727Oev1+upra1Fo9H01uRvAgcHB0JCQi5Zz8EaRPEX+dVhTua+SEPjJiIj/0hExCNXrK+6ujpSUlIoKyvDxcWFmTNnMmLECKt35QomAXVRq9l0rUWNLNgFz3kx2Md5WnwqUXV2kPH9Rgr3/ADAsJtmMXbe4h6rZZPRxMmMRrK2V6Jo1xAY485NKwYTFHt2/4CmuJiWt95GefDgBe1LHB3xXrEC7/vv6ymqojfq2XRqE6sKV9GibmFC0ASeGP4EST5JlgfXVgYH/gvHvgV7V/M6/XGPmH++DHYUNvDE17m4O8p4bmY8d4+LwNFC4fdzqa2txdXVlYiIiN/k6h5BEGhra6O2trbflt/nIoq/yK8KczL3FerqviI87KErlsxtampi//79lJSU4OjoyI033sjo0aOxs7MutiwIApqSdrPpWoMKWz8nvO9KwGGwt0VhUisVZG/dRO6P2zDq9SRNmc64BbefZ7p2OreZzG0VdDZ14xvmyuQ7BxGW6NXTpra8nJZ3VqL48Uds3NzwffIP2MfFne1EIsExORlbH3Oi1mAysL18Ox8WfEidso4RfiP4f9f/P0YFjLI8uK5aOPiauWyirT1c90eY8AdzQZXLZM+JJp5cn8eIME8+u3d0n5K4Go3mNyv8ABKJBG9vb1paWgakPVH8RX41KBTFlJe/QWtbijmZG/3XAf9Db2tr48CBAxw7dgx7e3umTJnCuHHjcHCw3ulRc7oT+e5KdNUKs+nakkE4DfW1bLqm7iZn5xayt32HTqMmfsL1TFh0B56BZw3Sqo61cXRrOW21SjwDnbn5oSSihvn2jF9XW0vru+/RtXUrNg4OeD/yMN733ovUgoWESTCxu2o37+W9R6W8kkTvRP4x7h9MDJp4EdO1Zjj0OmR/Zn495gG47s/gOjCejamlLTz2VS6Dg9z4/N7RuPZj9c5vVfh/YiDHJ4q/yDWPSlVOecWbNDfvxNbWjZjopwkLe3BA/xC6uro4ePAgeXl5SKVSJk6cyMSJEy+ooXsxtNVy5Lsq0ZZ1IXWzw+O2M6ZrFmq96nVaCnbtIHPLt6gVcmJGj2PC4rvwDYvoOae2pJ2jW8ppqpDj5uPA9HsTiR3t32O6pm9qpvXDD+j8dhMSiQSvZcvwfvCB85ZpnosgCKTWprIybyUnO04S7R7Nm1Pe5IawGyx/nt3tcOQdyPjIbK08/E64/mnwuPQ+Bms5Wt7Gg2uzifZzYfV9Y/ol/NcC9913H9u3b8fPz4+ioiLA7OK6ZMkSKisriYiIYOPGjXh6erJp0yZeeOEFvLy8+P777/H29qasrIznnnuODRs2XPF7lQjCteOlNmrUKCE7O/uXvg2RawS1upaKindoaPwOqdSB0JDlhIU9MKDWDEqlkkOHDvHT/3c/ma65uloft9bVK5HvrkJT0o6NswzXqaG4jA1EIutd9I0GPcdS9pCxeT3KjnbCk4dz3ZK7CYg5G55pLO/i6JZy6k524OJpz6iZEcRPCER65ovE0NFB26qP6Vi3DsFoxGPhAnweeQSZv+VZeEZDBivzVlLQUkCISwiPDnuUmZEzL2K6poCjZ0zXtAoYshCmPAve0VZ/Nj+ns1vHR6nl7DnRhOkc7anrUBPq5cSGB8fh7dK/1TvFxcUkJPTf6nkgSE1NxcXFhWXLlvWI/9NPP42XlxfPPPMMr776Kh0dHbz22mtMmTKFnTt3snnzZjo6OnjiiSdYunQp//73v4mNtZxg722cEokkRxCEi8TqLkSc+Ytcc2i1TVRUvk99/QYkEglhofcSHv7gecVVLhe1Wk1aWhoZGRkYDAaGDRvG5MmT8TiTALUGfXM38r1VqAtbkTjY4nZTOC4TgrGx711MTSYjxYcOkP7tOrqamwiOT2TWH54mJPFsUrWlRkHm1nIqj7Xh6CrjukWxDL4+CNsz7p1GhYL2zz+n/YvVmDQa3GfPxufxx7C7yG7igpYCVuauJKMxA38nf14Y/wL/n73zjo+iTh/ws5vee++BVJLQAoHQQui9SROxi4gU9Tzr3Xn6O/U4G1UUsYGooChNEJAUEgKEQCB0EtJ7z26y2T6/PxYTAtkYEDDoPp9P/sjM7MxkkrzzLe/3ead2n4qJPn21qlnn00/9AGQ1EDpRZ9p069HpZ3M9jQo1n6Xm8cmhXBqVaoYEuWB7jVMoJsCRZ0YG33Lg7yoMHTqU/Pz8Ntt27NhBUlISAA899BBxcXEsX74csViMQqFAJpNhYmJCSkoK7u7uHQb+24kh+BvoUhQUbiA3930EQYOn5yz8/Z/G3Oy3F0B1FoVCwdGjR0lLS0OhUBAREUFcXBzOzp1/sahr5UgOFiI7WYHIRIzNcB9shnojtmj/334LhzUAACAASURBVEnQarl8LI20rV9RW1qMa0A3pr+8CP+efVqGWurKm0jflUfOiUrMLI2JmRJI1HDvFumaViaj9qvN1Hz6KdqGBmzGjMFl6RLMuulvhV+svciazDUkFyfjaO7IC/1eYFbILMz06avVSsjcCIfeBWkZdIuH+H+AV9/2j+8EcpWGTUcKWJd8hdomJaPD3XhudDCh7ndOrAfw+q5znC+V3NZzhnva8tqkm38BVlRUtPid3N3dqaioAODll19m5MiReHp68tVXXzFz5ky+/fbb23rPHWEI/ga6DPX1GeTkvI2z8wiCg/6BhcXtK+6jUqk4fvw4qampyGQyQkJCiI+Px62DYZLr0UgUSBKKaDpeDiKwHuSFTZw3RtbtZwAJgkBeZgapWzZRlZ+Lk7cvk557maD+sS1BX1LdzPGf8rh0tBwjUyP6jvOj9yhfzK7aO7VKJfXfbqF6/Xo01dVYDRuK67JlmIeH673PvIY81p5ay778fdiY2rC091Lmhc3D0kTP/IVWA1lbIOm/UF8APgNgxgbwH9zpZ3M9SrWWLRlFrEnIpkKiYEiQM38bHUIvn873rP6MiESilt/9qFGjGDVqFAAbN25k/PjxXL58mXfffRcHBwdWrlx5U3NON4sh+BvoEmg0Ci5cfAVzc28ieqy4bZ59tVpNZmYmhw4dQiqVEhgYSHx8PN7e3p2/tyYV0uQiGtPKQCtg1c8Nm3hfjPUI0gAKz2aRumUjZZcvYufmzrjFfyN00FDEV8fXm+oVZOzN53xqKSKRiKh4H/qM8cPSVvciEVQq6rdvp/rDdajLyrDs3x+XVSux7NNH7zVLGktYd2odu3J3YWZkxhORT/BwxMPYmuppZWu1cGEHJL4F1ZfBoydMeA+6j2xjFr0ZNFqBHzNLWHnwMkW1zUT7ObByTm8GBN45m2p73EoL/U7h5uZGWVkZHh4elJWV4era1mskk8n44osv2LdvHxMnTuSHH37g+++/Z/PmzTzxxBN37L4Mwd9AlyC/YC0y2RV69fzitgR+rVZLVlYWSUlJ1NfX4+Pjw4wZM/D39+/8OeRqpCklNKaWICg1WPZyxXakL8ZOFno/U5Z9idRvN1J49jTWjk6MemIxPeJGYnR1UVhzo5KT+wo5k1SMoBEIG+RB9Hh/rB10qaSCVovkpz1UrVmNqqAQ86goPN/8D5YDB+rNxqmUVbI+az3bsrchRsy8sHk8FvEYThZ6Aq4gQPZ+nYqhPAtcQmHWRgibfMtBX6sV2Hu2nPcPXOJKVRMRXra88UgEccEuf/r0y99i8uTJfPnll7z00kt8+eWXTJkypc3+d955h6VLl2JiYkJzczMikQixWIxMJruj92UI/gbuGoIg0NBwAhubCIyMWvPmGxsvUVDwMe7u03ByGvK7rqHVarlw4QKJiYlUV1fj4eHBhAkT6N69e6eDkFapoTGtlMZDxWhlaiwinLAd5YeJm35XfWV+Loe3fkXuiXQsbO2Ie/Bxeo4aj/HVRWGKZjWnfink9MEiVAoNIf3d6TfRHzsX3YtOEAQaDx6kauUqFNnZmAUH4/3hWqyHD9d733XyuhbpmkarYVrQNBZELcDdqoM5krxDuqBfdAwc/GHaxxA5E/Rl/PwGgiCQeKmS9/Zf5lyphCBXa9bN68PYCPe/ZNCfO3cuSUlJVFdX4+3tzeuvv85LL73ErFmz+PTTT/Hz82Pr1q0tx5eWlpKens5rr70GwJIlS+jXrx/29vZs3779jt6rIdXTwF1BEARyct6msOhTTE1dCfB/Gk/PWYhERmScmElzcxEDB+zHxKTzJQ6vP392djYJCQmUl5fj7OxMfHw8YWFhnTdtqrU0HStDkliEtlGFeYgDtqP8MPXWn/ZZW1pM2tbNXDqSgpmlFdGTptNn/GRMzXW9A5VCw5mkYk7uK0AhU9Ottwv9JwXi6GnVct9Nh9OoWrkS+ZkzmPr54bx0CbbjxiHSI4uTKqVsPL+RTec3IVPJmBg4kad6PoWPbQd598UZcPANyEsGG08Y9nfoPR/0lVnsBGlXqnlv/2VOFNTh62jJMyODmNLLCyM9i9nuNF0h1fNuYEj1NHBPkZu3gsKiT3F3m0qzvJhLl1+joPAT7O2ikUhO0yP8g1sO/Hl5eSQkJFBUVISDgwPTpk0jMjKy86ZNjYDsZAWSg4Vo6hWYBthh94AfZv4dSNeqKkn7/mvOJydgbGpKzLTZRE+chvnVqlcalZZzqSVk7C2gWaLEt4cTMZMDcPVrHX+XnThB1QcrkGVkYOzpgceb/8FuyhREerxBMpWMby5+w+fnPqdB0cAov1E83etputl3kHdfflbX0r+8FyydYcxbEP0YmHR+xfL1ZBbW8e7+SxzOqcHd1pw3p0UwK9oHEz2L2Qx0TQzB38AdJz9/Hfn5a/D0mEVo6JuAiNraQ1zJfZ/yiu04OcXh5jbpps9bXFxMQkICubm52NjYMHHiRHr37t1506ZWoDmrCskvhairmzHxtsZhRhBm3e319hYa62o59uMWsn7Zh0gsos/4SfSfMhNLO10Wi1aj5eLRco7/lEdjrQLPIHvGLojAs3trlkvz2XNUrVxJU0oKRs7OuP3jH9jPmolYjzdIqVHy3eXv+CTrE2rkNQz2GsyS3ksId9Kf8UN1tm4i99wPYGanS9mMeQrM9Guef4sLZRLe23+JXy5U4mRlyj8mhPHAAD/MTW5tyMjAH4sh+Bu4oxQWfc6V3Hdxd5tCaOh/EIl0rUMnp2E4Og6lvj4dG5vwmxofLi8vJzExkUuXLmFpacmYMWOIjo7utOZWEATk52uRHMhHVS7D2M0Sp/nhmF8jSLueZqmE9B3fc2rfT2g1aiLiRjFgxhxsnHTrAwStQPaJCtJ35dFQ2Yyrnw3xD4ThHdZq71RkZ+ukawcOYGRnh+vzf8Nh3jzEFu1PIKu1anZe2clHpz+irKmMaLdo3o97nz5u+jN+qC+EpOVw+mswtoAhf4PYJWBxa70qgCtVjXxw4DK7s8qwMTfm+dHBPDIoACszQ/i4lzH89gzcEZqbS8jLX01Z2Xe4uIwlLOx/iERtW4gikQgHh5hOn7O6upqkpCTOnj2LmZkZ8fHxxMTEYGbWuVWhgiCgyKmnYX8BqiIpxs4WOM4JwSJKv3RNIZNx4qcfOfHTdpRyOeGD4xh43/3Yu3u0nDPvdDXpu3KpKWnC0dOKcQsjCejp3CpdKyykas0aJLt2I7a0xPnpp3F8+CGM9CgktIKWn/N+5sPTH1IgKSDCKYJ/x/6bgR76M36QlusWZ534AkRiiFmok65Zu3Tq2bRHcZ2Mlb9ks+1kMeYmRjw9vBsLhnTDzvLe9O4YaIsh+Bu4rSgUVeQXrKWk5FtAhI/Po3Tv9nfE4lv/U6uvryc5OZlTp05hbGzMkCFDiI2NxUJPi7nd+8pvoGFfAcq8BozszHQ1c/u4ITJqP5iqFHIyf97N8Z3bkDdKCeofS+yseTj76CpRCYJA8YU6ju7MpTJfgp2rBaMeCyeor1vLi0RVXk71h+uo/+EHRMbGOD76CE6PP46xQ/utcEEQSCxKZM2pNWTXZRPkEMTK4SsZ7qM/4wdZrU7DkP4JaFXQ+wGddM3Oq9PP5noqJXLWJObwTXohIpGIh2MDWDS8G873uHrBQFu6VPCXy0sQBOEvmSJ2r6NS1VFQsJ6i4o0IggoPj/sI8F/8uypqSaXSFumaSCQiJiaGwYMHY23d+XFrZUkjkv35yC/VIbY2wX5SIFYxHoiM25+cVKtUnDn4M8d+3EpTfR3+vfoyePZ83AK7txxTllPP0R25lGbXY+1gxvD5oYQOcEf8q3Stpoaa9eup++ZbBEHAYdYsnBY+iYlr+0XLBUHgSNkR1mSu4Uz1Gfxs/Vg+ZDljA8YiFumZRJVL4Mha3ZeyEaJmQdxL4Ni54vHtUdek5KPkK3x5JB+1RmBmtA9LR3THw67zL1kD9w5dKvirVLVIpFnY2fb8o2/FQCdRq6UUFn1OYeGnaDRNuLtNJiBgKZaW/rd8TplM1iJd02q19O7dm6FDh2Jnpz/75npUFU1IDhTQfLYGkYUxtmP9sY71RKynIpRWo+HcoYMc+f4bpNVVeIdFMPHZl/AObV0pWlUo5eiOXArP1WBha8qQ2UH0GOyF0VV7p6ahgZrPPqd20yYEuRy7qVNxXrQIU2/9rfDMykxWnVxFRkUG7lbuvB77OpO7TcZYX09JKYP09XB4BTTXQdgkXQUt11tPcZTKVWxIyePT1DyalGqm9fJi2cgg/Jz0r2sw0D5FRUU8+OCDVFRUIBKJWLBgAcuWLeuSWuculecfEmImbN/xPGGhb/7Rt2LgOpTKGoqKv0QhL2/ZJqClpiYJlaoOF5cxBAY8g7V1cAdn+W2OHz/OL7/8gkKhICoqiri4OBz1uOnbQ13TrJOuZVYiMjHCeogXNkO8EJvrl65dOpJC2ndfU1dWgnu3IAbNno9fVO+WHmhtaRPpu3K5klmFmaUxfcb4ERnnjclVe6e2qYnaTZuo+exztBIJtuPH4bx4CWaB+kvtna85z+rM1aSWpOJk7sQTUU8wM3gmpkZ6KoWpFXDiS0h5FxordAqG+H+AZ+9OP5vraVZq2Hgkn3XJV6iXqRjbw53nRgcT7Pb7yjD+UXSFPP+ysjLKysro06cPUqmUvn37sn37dr744ovbpnX+U+b5i0TGVFTsJjjoHxgZGbqaXQGVSkJh4ScUFX+BRiPHzMytTRFtW9teBAYsxdY26ndfq7i4mD179hAQEMDYsWNvcKB0hKZBgSShkKbjFSAW6YL+MB+MrNqfnBQEgSsn0knbsomqwnycffyY/PyrdI8e0BL0G6qaOb47j8vp5RibGhE9wZ9eI30xu2rv1CoU1H3zDTXrP0FTW4v18OG4LFuKeWio3vu8Un+FtafWcqDgALamtjzT5xnmhs7VL13TqOH0N7qyiQ1F4DcIZn4JfgM7/WyuR6HWsOV4EasTcqiSKhgW7MLzo0OI9O58z8pA+3h4eLQYPG1sbAgLC6OkpKRLap27VPA3M/NAo2mksnIvHh7T/+jb+UujVjdRXPwlBYWfoFZLcHUdT2DAM1hZ3Xohj46vp2bnzp1YW1sza9asTpdN1DQqkSYV03i0FASw6u+ObbwPRrbtT04KgkDhmdMc3rKJspxL2Lt7MH7J84TEDmmRrjXWycnYk8+Fw2WIjET0HOlLnzG+WFhfI13b9gPV69ahrqjAcuAAXJctw6JXL733WSQtYt2pdfyU9xPmRuYs7LmQB8MfxMZUTytbq9Xl6Ce9DTU5uhb+pJU6zfItzompNVp+OFnCyoPZlNQ30z/AkQ/n9aGf/++vvdvl2PsSlJ+5ved0j4Rx/+304fn5+WRmZhITE9Mltc5dKvibmNhjYWFLadn3huD/B6HRKCgp/Zr8/HWoVDU4O8UTGPgsNjYdLCi6DaSlpVFZWcmcOXM6Ffi1zWqkKcU0ppYiqDRY9nHDdoQvxo76P1ty6QKHv91I0fkz2Di5MGrBEnoMG9EiXZNJlJzcV8DZZF3iQfgQT6LH+WNlr3uRCBoNkt27qVqzFlVRERa9euG5fDlWA/Snq1Y0VfBx1sf8mP0jRmIjHgx/kEcjHsXBXE/evSDApb2Q+CZUnAXXcJi9GUIn/C7p2u4zZaw4cJnc6iZ6etvx9vRIhgQ5G5Ir7hCNjY3MmDGDFStWYHtdHeWuonXuUsEfwNNjJldy30Umy/9dk4YGbg6tVkVZ2Tby8lejUJTj4DCQboHPYWfXwYKim0QQBMrLy3F1dW2zCreqqork5GR69OhBaAdDJgBahU66Jk0uRpCrsYhyxnakHyaurYK0itwc5I3Sls+oVSqyftlLXmYGlnb2DH94AVEjx2F8dVGYQqYi80AhpxOK0Sg1hAxwp9+EAGydLVrOKd1/gKrVq1DmXMEsNBTvj9ZhPWyY3uBZK69lw5kNbLm4BS1aZgTPYEHUAlwt9QxlCQLkJulUDCUZuqyd6RsgYnqnpWtarcDJwjpkSk3LtjqZknVJV7hYLiXEzYaP5/dldLjbnz/o30QL/XajUqmYMWMG8+bNY/p0XSO2K2qdu1zw9/CYzpXc9ykt+57u3Z7/o2/nT48gaKio2E1u3gqamwuxte1NeNg7ODrG3vZrJSUlkZycjIODA8OGDSMqSjdPsGvXLkxMTBg3bpz++1RpaTxWhjTpqnQt1BHb0X6YeramfRafP0vqlo2UXDx/w+fNrawZPPch+oydhMnVnoVSriYrsZhTBwpRyNR07+tK/0kBOLhfI11LSaFqxUrk589jGhCA1wfvYzNmjF7pmkQp4YuzX/DVha9QaBRMCpzEwp4L8bbpoH5A4TFI+D/ITwFbb5i0Cnrdf1PSNa1W4KUfstiaUXzDPn8nS1bO6cXEKM8/TLr2V0EQBB577DHCwsJ47rnnWrZ3Ra1zlwv+ZmZuODkNo7zsBwIDnvldi4MMtKLVqlGpattsa5Bkkpv7AU1N2Vhbh9Ez6hOcnDpYUPQ7SE1NJTk5mbCwMOrq6ti+fTupqan4+flRWFjIlClT2s3fFzRamk5UID1YiKZBiVk3O2zn+2N2jSCtPOcyqVs2UZCViZWDI/GPLsTVv+3chLOPH2ZXu89qlYZzh0o58XM+zVIV/pFO9J8ciItP6/h7U3o6VStW0nzyJCZeXni89RZ2kyd1KF3bfGEzn5/7HKlSyhj/MSzqtYhAuw7y7stO61r62fvBygXGLoe+D9+0dE0QBP696xxbM4p5clggo8Nbq5MZicX08LQ1SNfuEocPH2bTpk1ERkbS6+oc0FtvvdUltc5dKtXzV6VzZdU+zpxZRM+oDTg7D/+jb+ueRqtVU16+nbz8VcjlJTfst7QMJDDgGVxdx7V4d243R48e5eeffyYyMpJp06YBtHHuBwQE8OCDD7Z56QhagebTVTT8UoCmRo6prw22o/0xv0aQVl2Yz+GtX5Fz/CjmNrbETLmPnmMmYGLa/mSvRqPlYloZGXvyaaxT4BViz4Ap3XAPbM1yaT5zhqoPVtCUloaxiwvOi57CfsYMRHqkawqNgq2XtrLhzAZq5bUM8x7G4t6LCXXsYPiq6pJuTP/8DjC3h0HLIOZJML35vHpBEHh770XWH8plwdBAXh4X+ucf0tFDV0j1vBv8KVM9f8XZaTgmJo6Uln1nCP63iCBoqazcQ27eSmSyXGxsIvD1fRyRqPVXbmrqhLPTiDvau8rIyODnn38mLCyMqVOntmiWe/ToQVhYGDk5OXh5ebUELEEQkJ+roeFAAeoKGSYeVtg/FI55aKt0ra68lLStm7mYdghTcwtiZ86jz/gpLS3769FqBbKPV5C+Ow9JVTNuAbaMeCgM79DWLBf5pctUrVpF48GDGNnb4/rCCzjcPxexnslnlVbF9pztfHz6YypkFcS4x7C492J6uerP+KE2T5eymbUFTCx1GoaBT4PFrde1/eDAZdYfyuXBgX5/6cBv4ObpksFfLDbFw30ahUWfkXyo7zXbTXB3n4q/35O37H7/s6HVqigr/4HCwg0ola3DOoKgRqNpxMoqiMiID3FxGX1XA0NjYyMpKSkcO3aMoKAgZsyYcYNqWSwWExzcuihMq9RQs/E8ipx6jF0scLw/FIsI5zbStcx9u0n8Yj1GJib0nzyD6MkzsLBuP11SEARyT1WRviuP2tImnLysmbAoCr9Ip1bpWn4+VavXINmzB7GVFc5LFuP40EMYXTMEdb7mPC8ceoF6RX3LNqVGSbO6mSiXKN4c/CYxHh0I6iSlcOgdOLkRxMYwYBEMfhasnG/qmV5LYY2MD365zI+ZJcyO9uHfk3oYAr+Bm+KOB3+RSDQWWAkYARsEQejUNLyv7xMICAiCqmWbQlFFYeEGSkq+wdfnUXx9H8XY+N5cjfh7EQTtNRO1Bdja9sTRcVCbY+xs++DmNuEGm+adRCaTkZaWxrFjx1Cr1fTp04dx48ZhrGes/FcElVYX+K/UYz+lG1b9PW6QrmUd/JmEzz4isG9/Ri9YgpW9fkFa4flaju3IpapQir2bJaMf70H3Pq6t0rXSUqo+/JCGH7cjMjXF6fHHcXrsUYzs27bCs+uyWXBgAZbGlowPGN+yXYSIWM9YhnoP1R90m6p10rXjG0Crhj4PwdDnwfbWfUflDXJWJ2Sz5XgRRmIRT8V14/nRIYgNE7kGbpI7GvxFuqizFhgFFAPHRSLRTkEQbkzHuA4zMxeCg169YXtjUza5uSvIy19FUfFG/P0W4O394F9mRbAgCFRXH+BK7gc0NV3G2jqUqKj1ODvF39WWn0QiITU1tWWxyq+Ul5ejUCiIjIwkLi4OJyc9RcSvQVBrqdl8AUVOPQ4zg7Hq63bDMedTEjnwyVoCevVl0rMvt6RpXk9pdh1Hd+RSltOAjaM58Q+GEhJzjXStqorqj9dTf9Wb4jB3Ls5PLsDY5Ub1cV5DHk/sfwIzsRmfjv604zKJ19JcD0fWwNF1oJJB1ByIe1FXM/cWqWlUsC7pCpuOFqDRCszp78Pi4UG42916RS4Df23udMu/P5AjCEIugEgk+haYAvxm8NeHtVUQUZFrkUjOkJv3ATlX/kdh0ef4+y/Cy3M2YvGfUzsrCAK1tSlcyX0fqfQMlpYBRPRYiavr+Ds2UdseTU1NpKamcvz4cbRaLd7e3m1eOsHBwQwePBg3txsDeHsIGoHaby8iv1iL/dTu7Qb+S0dS+XntB/j2iGTS315pN/BX5Es4tjOXovO1WNqZMnROMOGDPTG6au/U1NdT8+mn1H61GUGpxG7aVFwWLcLEs/1WeJG0iMf3P46AwCdjPulc4Fc2wbGP4PAqkNdD+FQY/gq4hHTqWbRHQ7OKDSm5fJaaR7NKw7Te3jwzMggfxzuz8MfAX4c7Hfy9gKJrvi8GOl+9owNsbSPp1fMz6uszuJL7Ppcvv05hwScEB7+Gi8vI23GJLkNd/XFyr7xHfcNxzM29CAtdjrv71LuaBiuXy0lLS+Po0aOoVCqioqIYNmzYzUnXqptpPF6OcM0iJHVVM4qceuwmBmI9wKPN8YJWy7nkgxz4ZA0ewaFM+fs/b8jkqSlp5NjOXPJOV2NmZczAKf545v0ChxKpOqQ7RqtUIP15H9qmJmzHj8dlyWJM/f111xAEUkpSSC1J5drMt0PFh5Cr5Xw25rOO0zUBVHI48TmkvAdNVRA0BuJfBY9bt9PKlGo+P5zP+kO5NDSrmBDpwbOjguju+tcc5jRw+/nDJ3xFItECYAGAr6/vTX/e3j6aPr03U1t3mJyc/3Lm7CIiIlbj6jLmdt/qXUciyeJK7vvU1qZgaupCcPC/8fKcdVd7N0qlkmPHjnH48GHkcjnh4eEMHz4cl3aGSfShrlcgPVhI04lyEIkQm10zByEWYTc+AJvBrdpjQRDIyThK2pavqC4qwDM4jOkvvYapeevQXn2ljPRdeWRnVGBiZkS/iQH0HOZB1asvUrd//w1j95YDYnBZshTzkNYJ5mNlx1iVuYqsqiwsjS3bGDXtzOxYH7eeEMcOWu0aFZzaDMnvgKQY/IfoVAy+t96+kas0fH2skA+TcqhuVBIf6spzo4KJ8DJI1+4F5HI5Q4cORaFQoFarue+++3j99dfJy8tjzpw51NTU0LdvXzZt2oSpqSmrV6/m448/xtfXl+3bt2Nqakpqairbtm3jgw8+uKP3ekfz/EUi0UDg34IgjLn6/csAgiC83d7xv+b53ypqdSOZpx5GKj1Lz6iPcXIadsvn+iNpbLxMbt4HVFXtx9jYHn+/J/H2nn9X5zXUajUZGRmkpKTQ1NREUFAQ8fHxLXKqzqCRKpEmFtF4rAwA6xgPbIb7YGTTfs68IAgUnD5J6pavqMjNxsHDi9hZ8wgZMLhlRa20Vk7GT3lcOFKOkZGIyOHe9Bnth5mFmNKXXkayaxduL7+E40MP6b2v01WnWX1yNcfKj+Fm6cbCnguZ0n0KJmI9K2q1WriwE5qvWSSnlEHGp1CbC17RMOKfEDCs0/4dlUbLnjNlNCrULdukcjUb0/IpbZAzINCRv48Joa/fn1C6dofoCnn+giDQ1NSEtbU1KpWKwYMHs3LlSt5//32mT5/OnDlzWLhwIT179uSpp55iwIABpKWl8dZbb9GzZ08mTpzI2LFj+eabb/T2qu+VPP/jQJBIJAoASoA5wP136mLGxtb06vkZmZkPkHXmKXpGbbgjmoI7hUyWT17eKsordmJkZEVAwDJ8fR65qxlNGo2GU6dOkZycjEQiwd/fn9mzZ99Ur0wrUyE9VELj4RIEjVYnXRvpi7G9/snJ4ovnOPztJoovnMXWxZUxC5cRPjQe8dX0UJlEyYm9+ZxNKQEBIoZ60XecH1Z2ZghaLeWvvYZk1y5cnn1Wb+C/WHuRNZlrSC5OxtHckRf7vcjMkJmYGXXQkxIE2PM3yPjsxn1uETD3Wwgee1PSNY1W4Nktp9idVXbDvl4+9rwzsyex3ZwMqZv3ICKRqGWlukqlQqVSIRKJSEhI4OuvvwZ0Sud///vfPPXUUwiCgEqlalE6f/XVV4wbN+6mhlNvlTsa/AVBUItEosXAPnSpnp8JgnDuTl7TxMSWXr2+4GTmPLLOPEmvnp9jb39TL8S7jlxeSl7+GsrKvkckMsHP9wn8/Bbc0bUMKpWK8vLyNuPctbW1HDp0iNraWry8vJgyZQqBgYGdDkJahZrG1FKkKcUICg0WUS7YjvTFxEX/5GRFbg6pWzaRf+oEVvYOxD+6kMj4MS2TuvImFZn7C8lKLEKjFggd4E70BH9sna5K17RaKt56m/rvvsfpqYU4P7nghmvkNuTy4akP2Ze/DxtTG5b1Wcb9offrd+j/iiDAvld1gX/QMl1+fgsinZJBj+NH7zPSCrzwfRa7s8p4YWwI9/Vpdf6IRCKcrU0NQf82sDx9ORdrL97Wc4Y6hvJi/xd/8ziNRkPfRvcREAAAIABJREFUvn3Jycnh6aefplu3btjb27ekO3t7e1NSolttv3jxYgYMGECPHj0YNGgQU6ZMYd++fbf1vvVxx8f8BUHYA+y509e5FlNTR3r32sjJzLmczLwfD/cZBAQs+V31ZO8ECmU1BfnrKC75GhDw8roff79FmJl1vojJzaJWq8nMzOTQoUNIpdIb9ru5uTFnzhxCQkI6HYQElYbGI2VIk4vQNqkxD3fCbrQfJu76dQXVRQWkbd1Mdnoa5tY2DJ33CL3GTMDErFW6dvpgEacOFKKUawiKdqX/pEDs3VrtnY3JyVStXIXiwgUcH34Yl6VL21yjpLGEdafWsSt3F2ZGZiyIWsBDPR7C1tT2hvtpl4T/wNG1ELMQRr5+y0rlXxEEgX/uOMu2k8U8OzKYRXHdf/tDBu45jIyMOHXqFPX19UybNo2LF/W/hObPn8/8+fMBeOONN1i6dCl79+5l48aN+Pj48N5777Wsir/d/OETvncKMzMX+vbZSn7+WopLvqasfDteXnOuBtfOT1beDjQaBYKgvOb7ZoqKN1JU9AVarQIPjxkE+C/BwkJ/rdffi1arJSsri6SkJOrr6/Hx8WHs2LGYmbUOeZiYmODj49PpPzZBraUpowJJQiFaiRKzIHvsRvtj6qN/mKq+vIy077/mQmoSpubmDLzvfvpOmNoqXVNqOJNcwsl9BcgbVfhHORMzORBn79YVt01Hj1G1YgXNp05h4uOD5/+WYztpUsvLqlJWyfqs9WzL3oYYMQ+EPcBjkY/haN5BV1oh1bX0fyX9Y13JxD4Pwdj/3nTgFwShzXg+wIpfstl8rJCFw7qxdIQh8N9JOtNCv9PY29szfPhwjhw5Qn19PWq1GmNjY4qLi/Hyavu//qvc7V//+hfDhg0jISGB//znPxw8eLDF93+7+dMGf9D1AIKD/4mv72Pk5a+hpGQzpaVb8fF+CD+/J+64IkKhqCQ//0NKSr9ts1L5V9xcJxIY+AyWlvprvf5etFptG4mau7s78+bNo3v37rc8vCBoBWSZlUgOFqKplWPqZ4vdnBDMAvU7aqQ11Rzd9i1nkw4gNjKm36Tp9Js8AwsbXStco9Zy4XApGXvyaWpQ4h3qQMyUQNwDrpGunT5N5YoVyI4cxdjNDffXX8d++jREV4eI6uR1fHb2M765+A0arYbpQdNZELUAN6sO1hzkHdK18IuO3bgvajZM/OCmAr8gCCRequS9/Zc5Vyq5Yf/Dsf68OLbzvSoD9xZVVVWYmJhgb29Pc3MzBw4c4MUXX2T48OF8//33zJkzp12l8z//+U/eeOMNgL+u0vlOYG7uSVjoW/j5LiAvbxUFhespLtmMr+9jd2RCVaWqI7/gY4qLNyEIajzcp2NldW1LT4SDYyw21h0XLvk9CIJAdnY2CQkJlJeX4+zszMyZMwkLC7vlbqSgFWg+W43kQAHqqmZMvKyxf6QH5sEOeoOZrKGeY9u/4/SBPQhagaiR44iZNgtrB10rXKsVuHysnOM/5SGpluMeaMeoR3vgFdL6YpZfvEjVylU0JiZi5OiI60sv4jB3LuKrvRapUsrG8xvZdH4TzepmJgZOZGHPhfjYdLAwqzgDDr4Beclg4wlxr7S1alo46IJ/JwupAKRdqebdfZc4WViPr6Mlfx8Tgplx67N2sTFjck9PQ+D/E1NWVsZDDz2ERqNBq9Uya9YsJk6cSHh4OHPmzOEf//gHvXv35rHHHmv5TGZmJgB9+ugKJ91///1ERkbi4+PDCy+8cMfutUsqne80jY2XyM1bQVXVfoyMrDAxviaHWmSEq8to/PyexNS0YzWBXF5GfsGH1NQktxkyUKpq0WoVuLtPIcB/KZaWfnfqR2mXvLw8EhISKCoqwsHBgbi4OCIjIzs/nKMRkJ2soPFwCVp564IsQa1F26jC2NUC21H+WEToz0iRNzaSsfsHTu7ZiVqlpMewEQycMRdbF918hqAVuJJZRfquXOrKZTj7WBMzORC/a86pyM2jes1qJHv2IraxwemxR3GcPx+xlS5Iy1Qyvrn4DZ+d/QyJUsIov1E83etputl3UGe4/AwkvAmX94KlMwz5G0Q/etMO/WvJLKzj3f2XOJxTg7utOUtHBDEz2tvg0L/LdIVUz7vBvZLq2SWxtg4hKnIdEkkWpWXfodUoWvap1A0UFn1OSem3+Pg8gp/v4zf0DJTKavILPqak5CsEQcDFeSRGRq2ZI0bGlnh5zcPaKuiu/UwAxcXFJCQkkJubi42NDRMnTqR379432DT1IWgFmrOqkPxSiLpa17I369b2Zzfrbo9lT5c2ps1rUcqbOblnJxm7fkAhayIkdiixM+fh6Kkb4xQEgYKzNRzbmUt1USMO7paMeSKCbr1bz6kqKaFq7Yc0bN+OyNwcp4VP4vTIIxjZ6V7SSo2S7y5/xydZn1Ajr2GI1xAW915MuFMHdYarsyHxLV1RdDM7iP8HxDwFZjcWkOks50slvH/gEr9cqMTJypR/TgxnXowv5iZ3T6RnwMCt0qWCf0NDAzU1NZ2Sgd0ObG2jsLWNumF7U1MOuXkryc9fQ3HxJuzsegO/Bjst9fXH0WjkeHhMvzpR20GJvtuMIAjk5uZy4sQJVKprjacKCgsLsbS0ZPTo0fTr1w8TPfKz9s4pP1+L5EA+qnIZJu6WOM0PxzzcUW/LvlkqIWP3j1QX5rfZXpZzmWZJA92iYxg06wFc/FrnM4ov1XFsRy7luQ3YOpsz4uEwgvu7txgpVZWV1Hz0MXXffYdIJMJx/nycFjyB8dW/B7VWzc4rO/no9EeUNZUR7RbNB8M/oLdrb/0/XF0BJP8PTn8NxhYw5HmIXawb1rlFrlQ18sGBy+zOKsPG3JjnRwfzyKAArMy61L+TAQMd0qWGfTw9PYUnn3yS3r17M3ToUOztb73Ixe1AKj1Hfv46muVFbbZbWXbH3/9prKx+w/lymyksLOTgwYMUFBRgbW2NjU1rq1wkEhESEsKAAQPaZPB0hCAIKHLqadhfgKpIirGzBbYjfbGI0t+yV8hknPjpR078tB2lXI6LX0Cb4SRrR2dips7EI6hVi1Ce18CxHbkUX6zDys6U6AkBhMV6tEjX1HV11GzYQN3mrxHUauynT8d50VOYuLsDoBW0/Jz3Mx+e/pACSQGRzpEs7r2YgR4D9Y+fS8vh0Ltw4gsQiaHf4zqHvvWtZ3oV18lY+Us2204WY25ixKODAnhiSCB2lp2vtWvgzmEY9rmHh31cXV3p378/GRkZnD59mujoaIYMGdJubde7gY1NDyIj1/wh176W0tJSEhISyMnJwcrKinHjxtG3b9/fdOR3hCK/gYZ9BSjzGjCyN8NhRhCWfdxucOj/ikohJ/Pn3RzfuQ15o5Sg/rHEzpqHs4/++YzqYp10LT+rGnNrEwbd152IoV4Ym+qGRTSNjdR+/gW1X3yBVibDbvIknJ9+GtOrq4kFQSCxKJE1p9aQXZdNkEMQq4avIs4nTn/Ql9XqHPrpn4BWBb3nw9C/g92tp9FWSuSsSczhm/RCRCIRjwwK4Km4bjhb/zkNsgb+GnSp4G9sbMy4ceMYOHAghw4dIj09nZMnTxITE0NsbCyWesr0/VmprKwkMTGRCxcuYG5uzsiRI+nfvz+meurJdgZlSSOS/fnIL9UhtjbBfnI3rPq7IzJuf3JSrVJx5uDPHPtxK031dfj36svg2fNxC9Sfp15X3kT67jxyMioxtTAmZnIAUfE+mJrr/ty0zc3Ubd5MzScb0DQ0YDNqFC5Ll2AWpJsjEQSBI2VHWJO5hjPVZ/Cz9eN/Q//HGP8xiPXpq+USOLJW96Vs1GXqxL0IjrfeO6trUvJR8hW+PJKPWiMwM9qHpSO642H316gdYeDPTZcK/r9ib2/P5MmTGTRoEElJSS3++NjYWAYNGvS7Wrz3ArW1tSQlJXHmzBlMTEwYNmwYAwcOxFxPPdn2UBRK0NTIW74XAPm5aprP1iC2NMZunD9WAz0Rm7Y/OanVaDh36CBHvv8GaXUV3mERTHz2JbxDe+i9pqSmmeM/5XPpSBlGJmL6jPWj9yhfzK10wyJapZL6rd9R/fFHaKqqsRoyBJdly7CIaD1nZmUmq06uIqMiAw8rD16PfZ3J3SZjrE9frZRB+no4vAKa6yBsMgx/FVxvPY1WKlexISWPT1PzaFKqmdbLi2Ujg/BzuvkC6wYMdFW6dBR1cnJixowZDB48mMTERBITEyktLWXWrFmdzmC5l5BIJCQnJ5OZmYlYLGbgwIEMGjQIK6vOBx1lkZSG/fkosutv2CcyM8JmhC82Q7wQm7f/qxe0Wi4dSSHtu6+pKyvBLTCI0QuW4BfVW+9QS1ODghN7CziXUgIiiBzuTd+x/lja6nooglpNw44dVK1di7q0DMvoaFxWrMCyb2t95vM151mduZrUklSczJ14uf/L3Bd8XxvNchvUCjjxpW4VbmMFdB+py+Dx7GDy9zdoVmr48kg+HyVfoV6mYmwPd54bHUywm8Ghb6DzaDQaoqOj8fLyYvfu3V1S5wxdbML3t/L809PT2bNnD+Hh4e0WBL9XaWpqIiUlhePHjyMIAn379mXIkCHY2nbSQQOoypto2F+A/HwNYitjbOJ8MA91bLM61cjGBLGejBRBELhyIp20LZuoKszH2ceP2NkP0D16QAe5/CpO7ivgTFIxGo1AWKwH0eP9sXHU9VAErRbJ3r1Ur16DMj8f84gIXJ55BqtBsS3nvFJ/hbWn1nKg4AB2ZnY8GvEoc0PnYmGsZ2hFo4bT30DycmgoAr9BEP9P8BvY6Wd1PQq1hm/Ti1iTmEOVVMGwYBeeHx1CpLfBoX8v0VUmfN9//30yMjKQSCTs3r2bWbNm3TadM/xJJ3x/i/79+6NWq9m/fz/GxsZMnTr1jkmP7gbNzc0cOXKEI0eOoFar6dmzJ8OGDcPBofNpiKrqZiQHCmjOqkJkZoTtKD+sB3vqDfLXIwgChWdOk7plI+U5l7F392D8kucJiR2CWM/qVmWzmlO/FHLqYBEqhYbgfm70mxiAves10rXERJ107dIlzIKC8F6zGusRI1qCfpG0iHWn1vFT3k+YG5nzVM+nmB8+HxtTPa1srVaXo5/0NtTkgGcfmLQSusXfsnBNrdHyw8kSVh7MpqS+mf4Bjnw4rw/9/A0OfQO3RnFxMT/99BOvvvoq77//PoIgdEmdM9xjwR8gNjYWlUpFYmIiJiYmTJgwoc3+e+FloFAoSE9Pb6mO1aNHD+Li4m6yOpYcyS+FyE5WIDISYzPMB5uhXog7SDsUtNo235dmX+LwtxspOn8GGycXRi1YQo9hIzC6OqciCIJusuDXa6q0nEku5uS+AhRNagJ7udB/UgBOXtYtx8uOHKFy5Urkp7Mw8fPF8513sB0/DtHVXlp5Uznrs9bzY/aPGImNeDD8QR6NeBQHcz0vPEGAS3sh8U2oOAuu4bpqWaETbjnoa7UCu8+UseLAZXKrm+jpbcfb0yMZEuRsUC/8SSh/6y0UF26v0tksLBT3V17p8JhnnnmG//3vfy3G3Jqami6pc4Z7MPgDDB06FJVKRWpqKidOnGizLyQkhJkzZ3bJSWGVSsWJEydaqmMFBwczfPjw31cda6AnNnEdV8fKP32Sw1erY12PpZ09wx9eQNSIsRhfzSJSyFRkHigkK7EY1TV6h1/xDXckZkogrn6tw1Kyk5lUrViBLD0dYw8P3P/vDeynTm2RrtXKa9lwZgNbLm5Bi5b7gu/jiagncLXUo68WBMhN0knXSjJ0WTvTN0DE9Jvy7Vz/LH65UMl7+y9xsVxKiJsNH8/vy+hwN0PQN/C72b17N66urvTt25ekpKTfPP6P1DnDPRr8RSIRI0aMwMXFhbq6upbtzc3NHDt2jO+++65LTQpfXx0rICCA+Ph4fHw6EI9dh1amQppcTGNaKYJGi1W0Ozbxvhjb6881Lz5/ltQtGym5eB5bFzcGTJ+N2Kj1V25ha0ePofGYmLc69LMSizl1oBCFTE23Pi4trfpf8Qp2wDOodfGd/Px5KleupCn5EEZOTri98gr2s2e1SNckSglfnP2Cry58hUKjYFLgJJ7q9RRe1h3k3Rceg4T/g/wUsPWGSaug1/1gdGuLqQRB4HBODe/uv8Sponr8nSxZOacXE6M8MdKzmM3Avc1vtdDvBIcPH2bnzp3s2bMHuVyORCJh2bJlXVLnDPdo8AfdC6Bnz543bHdycmLPnj388MMPzJgx4w8dBtJqtZw9e5bExETq6urw9vZm6tSpBAZ2PvdcK1fTmFqCNKUEQanBsqcLtiP9MHbWn2tennOZ1C2bKMjKxMrBkRGPLSIyfhRGxu0HT7VKw7lDpZz4OZ9mqQr/SCf6Tw7EpQMvv+LKFapWrUa6bx9iOztcnnsOxwfmIb66FkOmkrH5wmY+P/c5UqWUMf5jWNRrEYF2HfzsZad1Lf3s/WDlCmOXQ/QjYNz5xVTlDXKe/+40FZLWNFeFWkthrQxPO3P+Oz2SGX0N0jUDt5+3336bt9/WlSdPSkri3XffZfPmzcycObPL6ZzhHg7++rh+UnjKlCl3/QUgCAIXL14kISGBqqoq3NzcmDt3LsHBwTdfHSupCK1MjXkPJ+xGdVwdq6own7StX5Fz/CjmNrYMe+BReo6ZgIlp+8FTo9FyMa2MjD35NNYp8ApxYMCUQNwD9We5KIuKqF6zloZduxCbm+O86CkcH34Yo6uZSQqNgq2XtrLhzAZq5bUM8x7G4t6LCXXsIO++6pJuTP/8DjC3hxGvQcyTbRXLnaBKquD+DUeplCgYGuzcZt+jg/yZG+OLmXHX6A0a+OuwfPnyLqdzhi6W6tk7OEo4eeG0XsXAzZCcnExiYiJRUVGMHj36tikisrKyuHTpUofH1NTUUF5ejpOTE8OHDyc8PPzmqmMdL0eSUIRW2rnqWHXlpaRt3czFtEOYmlsQPWkafcdPwdSi/RXRWq1A9vEK0nfnIalqxi3AlgFTAvEO1Z9loKqooHrdOuq/34bIyAiH++/H6YnHMb6amaDSqties52PT39MhayCGI8YlvReQk+XG3tnLdTm6VI2s7aAiaWuRu7Ap8Hi5p1OdU1K5n5ylIIaGRsf62/I2PkL0lVSPe80f8pUT41USd22yzjcF6xXLNZZhg4diiAIJCcnc+HCBQYMGEBsbCwWFre+NP/EiRPs2rULGxubDhULpqamTJkyhaioqM7rlDW/VscqQFOnwNTfFru5oZh10AqXVFderY71C0YmJvSfPIPoyTOwsG7/RSEIAnmnqjm2K5fa0iacvK2ZsCgKv0j9Xn51bS016z+h7ptvEDQa7Gfeh/PChZi46apjabQa9uTtYd3pdRRJi4hyieLNwW8S4xGj/4eVlMKhd+DkRhAb64L+4GfByln/ZzqgoVnFg5+lk1vdxOcP9zMEfgMGOkGXCv5G1ibITlYiMhFjP/XWywyCbk4gLi6OiIgIkpKSSElJIT09nT59+nSoSRCLxYSEhODq2jYL5fTp0+zatYvu3bszZ86c25ZN1F51LIep3THroDpWU30dx7ZvJevAXgB6jZlAzNRZWNm3ny4pCAJF52s5tjOXygIp9m6WjH68B937uLY69EtLkezZg3CNJlpdV0fD99vQyuXYTZ6M8+KnMfX2bjnnwcKDrD21lpz6HEIcQlgTv4ah3kP1/96aqnXSteMbQKvW1ccd+new7Xy20/WUN8hZtPkEF8slrJ8fzaDut/YCMWDgr0bXCv52ZtjEeSNNKkZkLMZuYuDvTsFzdnbmvvvua1FEHDly5Dc/c/DgQaKiooiLi8PR0ZFz586xfft2AgICmD179m0J/IIgIL9Yi2R/AaqyJoxdLXF6IAzzHvpb4c2NUjJ2buPkz7vQqFRExI1kwIw52DrrSZcESrPrObrjCmU5Ddg4mhP/YBghMW6Ir054qqurqf54PfXfftsm8AMgEmEzZgwuSxZj1q1by30fLj3M6szVnK85j7+tP+8Me4fRfqP1S9ea6+HIGji6DlQyiJqjk645+N/0c/uVmkYF65KusOloAVpBYNWc3gwP1f8cDBgw0JYuFfwBbMf4I6i0NB4uRWQixna0/+8eAgJwd3dn7ty5aLVaOprnkMvlHD58mPT0dM6ePUtYWBgXLlzA29ubOXPmdLpASkfIc+qR7M9HWSjFyNEch9khHVfHapZxYs8OMnb9iFLeTGjsUGJn3o+Dh/50ycoCCcd25FJ4vhZLO1OGzgkmfLBni0NfU19PzaefUfvVVwhKJfbTp+G8cCHGbtcUOxeJWhZnAWSUZ7A6czUnK0/iZe3F/w36PyYGTuxAutYExz6Cw6tAXg/hU2H4K+AS0v7xnaChWcWGlFw+S82jWaVhWm9vnhkZhI/jX8v4asDA76XLBX+RSITdxEAElRZpUjHyi7XYjvLvsKrUzfBbE69WVlaMHj2agQMHkpKSQkZGBu7u7sybN6/TRVL0oSiUINmXj+JKA0Z2pthP645VtBsiPWmHKqWC0/t+In3H9zRLJXTvN4DYWQ/g4uuv9xo1pY2k78wj91QV5lYmxE7vTkScFyYtDv0majd+Se1nn6NtasJ2wgRcFj+Nqb/+c56tPsvqzNWklabhYuHCqzGvMiNoBib68u5VcjjxOaS8B01VEDQG4l8Fjw4mf38DmVLN54fzWX8ol4ZmFRMiPXh2VBDdXQ3SNQMGboUuF/xB9wKwn9ods0A7JL8UUrPpPCY+NtiN9sOsu/1dWY1pY2PD+PHjGTZsGKampr+rxa8sbUSyvwD5xVrEVibYTQzEOsYDkcnVoReVisbamtYPCAL5WZkc++FbGutq8YvqzeDZ83HvHtxySFODArWyVdfwq2/n8vEKTMyM6D8pgJ7xPphaXHXoy+XUff0NNZ98gqauDuuRI3BZshTzkNZzXk92XTZrMteQUJSAvZk9f+v7N2aHzu5AuqaCU5sh+R2QFIP/EJ2KwbeDyd/fQK7S8PWxQj5MyqG6UUl8qCvPjQomwssgXTNg4PfQJYM/gEgswrKXKxaRLshOViA5WEj1p2cxDbDDbowfZv5355//ZnTK16Oqkl2VrlUjMjfGdowf1rFeiM1ah1KktdVsff1l6svLbvi8V2g4E5a+gHd4RMu2qiIp6TtzyT9Tc8PxxiZieo/ypc9oP8ytdS8rQamkfts2qtd9hLqyEqtBg3B5ZhkWkZF677tQUsjaU2vZm7cXKxMrFvVaxPyw+Vib6kmX1Wrh7DZIegtqc8ErGqauhcC4zj2odlBptHx/ophVB7Mpa5AzINCRj+eH0NfPkMljoGvj7++PjY0NRkZGGBsbk5GRQW1tLbNnzyY/Px9/f3+2bt2Kg4MD27Zt41//+heOjo5s374dJycnrly5wiuvvMKWLVvu6H12qTz/jpTOglpLU3o5koRCtI0qzEMcsB3tj6nXH1PisSPUtXIkB69K10zEWA/ywmaoN2KLtu9aWUM9W/79EtLaGobe/3CLZgHA1sUV77CIll5OXXkT6bvyyDmhq47VM94bW5fWFrhIJMI71AErO93QlKDR0LBzF9Vr16IqLsaib19cn1mGZb9+eu+7vKmcj05/xPac7ZiITbg/7H4ejXgUOzM9L1pBgIs/6RZoVZ4HtwidUz947C1L1zRagV2nS/ngl8sU1Mjo5WPP38eEENtN/0S4AQPQdfL8/f39ycjIwNm5NfPshRdewNHRkZdeeon//ve/1NXVsXz5cuLi4lqMBHV1dSxZsoS5c+fyxhtvEHS1st31/Cnz/DtCZCzGOtYTy2g3GtNKkSYXU7k6E5sRvtiN0l9H9k6iqmhCcqAA+aW6NtsFtRaMRLqgH+eNkfWNawKaG6V8/59/IKmuYsbLr7dp3V+LpLqZ4z/lceloOUamRvQd50evka3Vsa5H0GqR7t9P1arVKHNzMe/RA/fX/oXV4MF6g2d1czUbzmxg66WtAMwOmc0TUU/gbKEnbVIQ4MpBnYqhNBOcusN9n0H4NLiJ1dRFtTIe+/I4hbWty9i1WlBqtIS627DhwWhGhLkagr6Be54dO3a0yN4eeugh4uLiWL58OWKxGIVC0aJ1TklJwd3dXW/gv53cM8H/V8SmRtjG+WA9wIP6nVeQHixEZCTCNt73rt2DurpZ17I/VYnI1AjLvm6IrimHKDYVY9nPHWO79ieIFbImtr35L2pLi5n64mvtBv6megUZe/M5n1qKSCQiKt6HPmP8WqpjXY8gCDQmJ+sc+hcuYNq9G16rVmIzapTe4Nnw/+2deVhV1frHP4sZRASVQSZHcMJ5IDVTS03N4ZpjetXKNL1l06/btWu3bnVv2W0wp1LTNFNTM9MyTZynnAccAxlEQQRE5ulwYP3+2FsE5TAJctT1eZ7zsM9aa2/efTa8Z+13v+v75qSw9OxSVv25CkOegSFNhjCl9RTqOZaQdx/1B+z4EC7/AbV8Ych8LXXTsnx/SrEpWYxZfIjULCPjuzSgsIWtvZ3pH+CBhRJdU1SQfWtDuX4lvVKPWdfHke4jTT8ju4kQgr59+yKE4MUXX2Ty5MnExcUVqPd6eHgQFxcHwNtvv03v3r3x9PRkxYoVjBgxgtWrV1eq3aa475z/TSzsrHAZ7g8SUoOiENYW1OzuXaW/05icQ9rOy2Qcu4awtMDxMW9qPuaNpYlZeHHEXgxhx7cLSIiKYPD//ZMGrYuWHcxKN3Bi62XO7I5G5kmad9OqYzm6mF6YlnHoMAmzZ5N18iTWPj54/u8TnJ56qkiaZpHxuRl8f/57lp9bTnpuOv0a9uOlti9R36mEO6irJzWnH74DHN1hwGfQfny5RNduEp+WzdhvDpOckcvKSYG09i6/nINCYa7s378fLy8v4uPj6dOnD82aFdW1EkIUTMj69OlToNy5fPlyBgwYQGhoKJ999hkuLi7Mnj0bB4eqSWO+b50/aA+FXYb7I435pPwWqcVWN7sgAAAgAElEQVTXH/Gs9N+Tl2YgbbeuoS+hRmA9nHr5YmliFl4c8ZciOLB2BRHHj2DvVIuBr0+ncYdbWTA5erZOsF4dq2lnDzoNbEAtV9MXPis4mPgvvyTz4CGs3N3xeP99nJ8eWqChfzvZxmzWhKxhyZklJOUk0cunFy+3exl/lxJmM/EXtJj+hV/B3gX6fACdJoFNxf4gb2QY+Oviw1xLzWb5852V41dUCWWZoVcVNyWb3dzcGDp0KEeOHMHd3Z3Y2Fjq1atHbGzsHQoCmZmZLFu2jK1btzJw4EDWr1/PunXrWLlyJZMmTaoSO+9r5w8gLAW1RzUlMTef5A3h5ESmFqRQAli52OHY1fOOh63FYUzKJv3gVfIzjYUa88k6l4g05uPQwR2nJ3yxKmEWfjs3rkbzx9qVhBzch61DDbqNGkf7AYOxsdMe1ubm5HFmt14dK9NI43audB7UiNqeprOMsv/8k4TZc0jftQvL2rVxf3s6zqNHF2jo305uXi7rL65n0elFxGfF06VeF6a1m0YrV9MZPySG66Jra8HGEXq+rWnw2JW9rvDthMal8fqaU0QlZrL02U50VBo8igeMjIwM8vPzqVmzJhkZGQQFBfHuu+8yePBgvvvuO6ZPn16srPOnn37KK6+8grW19T2Tdb7vnT9oD4PrjG3OjR9DMFxKudUhITPVQNq+GGr28LojzfImeakGUnddJuPINUDTGCqMXYs6OPX2xbqEWfjtpCbE88e6VZzfsxMrGxsCh46i48Ch2Onqonm5+ZzbH8OxLVFkpRrwbVmHwMENi1THup2ciEiuz5tL6uYtWDg54fraa9Qe91csTKSj5uXnsSliE18Hf01Megzt3Nox87GZdPIwnfFDSgzs/R+c+B4sbaDbK9DtNXCouKOOSszgy+0X2XAqhho2ViwY14GuSoNH8QASFxfH0KFDATAajYwZM4Z+/frRqVMnRo4cyZIlS6hfvz5r164t2OdmMZf33nsPgGnTptGpUyecnZ3ZsGFDldlqVqmerQNaytNnz1XqMYsssHK0pkZgvSJ3AXlJ2WQcuYbMk9To5K5VxzLxoLY4EqOvEHX6BIU/xqTYaM7s3IawELTtO4DOQ0bgUEsLb+Tn5fPnoWsc/S2S9Bs5ePo5EzikEZ5NTIc/cmNiSJj/FSkbNiDs7Kg9fhx1nn++QEPfkGcgKCqIpOxbWUe5+blsDNtIREoEzWs3Z1q7aTzqZTrjh/QE2P8FHF0CMl8rotL9/6CmR5k/i9uJTclizo4wfjx2BStLwYSuDZjyWGNcapQ9XKZQlBVzSfWsah7IVM+kqzFcDb2Ap3/lXUAbT0fqPttSk1YIiiJtx+WiAwQ4tHXDqbcvVnXKLvecHHeNgz+u5Pz+3XDbF6iFpSUBvfrwyNOjqVlHm+HKfMnF43Ec+TWSlPgs3OrX5PG/Nse7uWn1ztz4eBIXLCTpxx8RQlB73DjqTJ6EVZ06ABjzjfwS/gsLghcQm3HnIrFGtRrxRc8v6O3b27TTz0qCP+bCoQVgzNLKJfb4BzhXPHvqenoOX+0KZ8XhKKSUjA305aVeTXBzKnu4TKFQVC135fyFEJ8CgwADEA48J6VM1vveBiYCecArUsoylaUPWjiXcZ/MNllysKLY+jrh+kIr8rONUNhXWwosbMpe3Skt8TqH1q/m7K5tWFha0XHgUNr3H1xkgZaltXVB9SwpJZHB1znyawSJMRnU9qxB/ymtaNimboFDNl6/Ts7FQsXVpST9wAGSVq5CGo04DxtG3alTsPbQZuH5Mp+tl7Yy/9R8olKjCKgTwL+7/JsA16IpozWta95y+unx2kKswkQfhQNzIScFAoZBz39C3SZl/iyupWQTnlA0ne6P8OssPXCJ7Nw8hnfw5pUn/PB2UaJrCoW5cbcz/23A21JKoxDiE+Bt4B9CiBbAaKAl4AlsF0L4SynzSjpYLTcPEqMvc2TDOroMf+YuTSseC7uKnXJmSjJHNv7IqaDNyHxJ6979CBw6CkeX4mPhUkqiLyRx6JcI4i+lUsvNnj4TW+DXwb2IemdOWBhR48aTl1R0oRhCUGvwIOq+9BI2vr4Fx9x9ZTfzTs0jNCkUPxc/ZveaTS+fXiVo6CfCgVlw5BswZt/Z33QA9JoBHsUvMiuO+NRs5u0K44cjl8nNuzNsOKiNJ6/39qORq/mtvlYoFBp35fyllEGF3h4ChuvbQ4DVUsocIFIIEQZ0BkoU07dzdKRZtx4cWr8G/0e6Uce75NDDzecVVbkCNDsjnWO//syJzRsxGgy06PE4XYY9Qy03d5P7xIYlc2hjBFcvJuPoYkuvcc1o9ohHgYb+TQyXLhH13HMIKyt8Fi0sKH4OYOXhUaRwyqHYQ8w9OZcz189Q36k+n3T/hH4N+5nW0M9OhYPztZchHVqPhLZjobASp0NdcC17SlxShoEFe8L57uAljHmSER19GNzGE8tCX2buTrbUr1NxPSSFQnFvqMyY//PATSUiL7Qvg5tE622l0mvCJC4FnyBo4VxGv/8Johi5gKy0VI7+8hMnf99EHW8fuo0aR4M27Sv1S8CQncXJLb9y9NefyMnIoGmX7nQdOZbanqYXkiVcTuPQxggun0vE3smG7qP8aPmoF5bWd56DITqGqOeeB2Mevt8vx7ZJ8eGWk/EnmXNiDsfijuFRw4P3u77P4MaDS9DQz4Qji+DAl1o8v/kgbWbvVvHnKGnZuSzeF8mS/ZFkGIwMbevFq739lJNXKO5jSnX+QojtQHEpHzOklBv1MTMAI7CyvAYIISYDkwF8fX1xqOVMz/Ev8PtXswjetoW2Tz5VMDYnM5Pjv23g+G8bMGRn4de5C3ERYaz/+D28mrXk0VHjTGrklBWjwUDwti0c2fgjmSnJNOrQmW4j/4pbg0Ym97lxNYMjv0YQfjIBWwcrugxtTKue3lgXk1YKWjH0y889R35GBvW/W1as4z+feJ65J+eyP2Y/dezqML3zdEb4j8DG0kSmjDEHjn8H+z6D9Dho0lsTWfNsV/z4MpBlyOO7g5dYsCec5Mxc+rX04I2+/vi7Kw19heJ+p1TnL6XsXVK/EOJZYCDwhLyVNxoD+BQa5q23FXf8RcAi0FQ9AVo89jgX9u9m13eL+GPdqoKxudnZGA05+HXuSteRY6nrU588Yy5ndgRx6Oc1rHl/uqZ9P3o8Ho3LJ4yUZzRybvd2Dq5fTXridXwD2tDtzXfw9G9mcp+UhCyObook9Mg1rGws6fhUA9r29sX2poZ+Tg7Jq1dzY8VK8jMyCvbLz8pCWFjgu/Rb7G5L2QpPDmf+qflsi9qGk40Tr7V/jWeaPYODtYmHpnlGCP5BW5CVcgXqd4MRy6B+13Kdf2FyjHmsPnKFebvCSEjLoYe/K2/2bUorb6Whr1CURnJyMi+88AJnz55FCMG3335L06ZNHyxJZyFEP+ALoIeUMqFQe0tgFVqc3xPYAfiV9sC3sKRzetINjm36GWNOTkG/pZUVLR57HPdGd86Uc3OyORW0mSMb15GdlkqTTl3oNnIsdUuoegWQn5/Hnwf2cvDHVSTHxVLPvxmPjhqPb0Brk/ukJ+VwbHMkFw7EIiwFrXp60/5JX+x19U6Zm0vy+p+5/vXXGK9dw6FTJ2yaNC70uVlQa+hQ7Fvduku5knaFBcEL2BSxCTtLO8a3HM/4FuOpaWNilp2fD+fWw+6PITFMm+E//i9o/HiF5ZSNefmsPxHD7B0XiUnOonPD2vz9yaZ0UitxFfcB5pLnP2HCBLp3784LL7yAwWAgMzOTjz766IGTdJ4H2ALb9Hj7ISnlFCnlOSHEWuA8WjjopdIc/+04utSm57iJZR5vbWtHp0FP0/qJfpzYvJFjm9YTduwQnv7NsbI2fZqp1xNIvhaLa4NGDP3HezRs19F0AfU0A8d/j+LsnhiklLTo7knH/g2o4XxLQz/1t99ImDef3MuXsW/bFs+ZM6nxiOlKVnEZcSw8vZCfL/6MpYUl41uM5/mA53Gxcyl+BykhZIumtxN3FtxaaNWymj1VYaefny/ZdCaWL7eFEnE9gzbetfj46VZ096tbpQ/TFYoHjZSUFPbu3cuyZcsAsLGxwcbG5sGTdJZSmkwKl1L+F/jv3Ry/Itg6ONBl+DO0ffIpjv26npiQ8+QZjSbH13Lz4NHRE/AP7Frsw2WAnMxcTm67TPDOaPIMeTR9xINOTzXEqa62KExKSdq2bSTMmYMhLBzb5s3xXvA1jj16mHSeN7JvsPjMYtb8uYZ88hnmP4zJrSfj5uBW7HikhIjdsPNDiDkOtRvB04sh4GmwKPs6haKHlGy/EM/nQSH8eS2Npu41WTiuA31buCunr7iv2bVsEfFREZV6TLf6jej17OQSx0RGRuLq6spzzz1HcHAwHTp0YPbs2UrSuTSyM3Ir7Vj2NZ3oPubZcu2TkZLDuX1XySlkR54xn7Dj8eRkGmnSwY3Ogxri4qFluUgpydi/n4QvZ5N97hw2jRrh9eUsavbta/KLJNWQyrKzy1hxYQU5eTkMajSIqW2n4uVYQjLU5cOa07+0D5y8YdAcbSWuqQLqpSCl5EBYIp8FhXDqSjIN6jgwe3RbBrYumrapUCjKh9Fo5MSJE8ydO5fAwEBeffVVZs6cWWSMknQuhtTr2Vw6c50Gre6t6Fd2Ri4ng6I4vSuavNz8gqLnN6nXxJnOgxri6nMr/p559CjxX84m6/hxrL28qPfxx9QaNBBhVfxHmpmbycoLK1l6bilphjSebPAkf2v7NxrVMp1FRGywVi3rYhDUcIV+n0CHZ8G64jIJx6Nu8OnWEA5F3MCzlh0zn27FsA7eWFuWvQKXQmHulDZDryq8vb3x9vYmMFAL9Q4fPpyZM2cqSefSEBawZ1UInu85Y1OBlbjXIlOwsrakrnfZVpYasowE77zCqW2XMeTk4d/JnU4DG+LsVoKG/pkzJHw5m4wDB7BydcXjvXdxHjYMYVN8CmZOXg5rQ9ay+MxibmTfoId3D15u9zLNapvOIiIhRIvpn98Ids7wxHsQ+CLYVDyv/mxMCp8HhbArJIG6jra8N6gFYwJ9sbWqWMhIoVDciYeHBz4+PoSEhNC0aVN27NhBixYtaNGihZJ0LglnVwfSk3M4tCGCx0aXfeXptYgUDm0MJyYkGYBG7VzpPKghdTyL/xIwGvI4szuGE1ujyM7IpVFbfXwJxeCzQ0NJmDOH9O07sHR2xu2tt3AZ8wwWdsXPwnPzc9kQtoGFwQuJy4wj0COQl9u9TFu3tqZP5EakrqG/Bqwd4LG3oMtLYF/xgidh8Wl8sS2UzWeuUcvemrf6NeXZrg1wsDGrS69QPDDMnTuXsWPHYjAYaNSoEUuXLiU/P19JOpdEx44d5ay/r+L07miefrMD9RrfyiuXUnLjaga5hltJQ7nZeQTvvELUmUTsa1rToV8DDNlGTm67TG5OHv6d3Wn5qCcWVrdCGglRaRzbconMFAO+LWoTOKRREQ19Q3QMeYnXb/1eg4GkNWtJ/e03LGrUoPbzz1F7/AQsHU1r6G+O3MzXwV9zJe0KrV1b80q7VwisZzrjh9SrsPdTOLEcLKyg0wvw6OtQo+Lhrys3Mpm1PZQNJ2Owt7Zk4qMNmdi9EbXsK1cwT6EwF8wl1bOqMZdUz0oncEgjIoIT2PX9BUbN6IyltQVXLyZxaGMEsWEpd4y3dbDikb80onUvn4IVta16eHMiKIozu6IJPRx3xz71mtTiyRda4ulXNJ0ydfNmYt78u5ZDXwhhb0+dF16gzsTnsXQufhYupWTH5R3MPzWfsOQw/F38mff4PB7zfqwE0bXrsH8WHF0M+UZoPwEeexOcKl6K8lpKNnN3XmTN0StYWggmPtqQKT0aU8ex/LV2FQrFg4vZOX8bOyt6jmnGpnnB7FkdQkZSDpfP38DByYZHR/jh7F4oHi/Ao6ETtg63Vd5ytKbr001o29uXhMtpRftqWOPWoOYdDjlt+3Zi/v4WDu3bU2dy0Qcsdi1bFmjoSynJMmYV6T8Rf4K5J+dyPvE8DZwa8Oljn9K3QV/TomtZyXBwHhz6GnIzofVo6PkPcGlQjk+qKInpOXy9O5zvD0WRLyWjO/sw7XE/3JWGvkKhKAazc/4A9QPq4N/ZnQsHYrGroTnygJ5eWJdDdx/AwcmG+gF1Sh2Xvm8f0a+/gV1AS7wXLCg2pJMv8wmKCuKrU18RmRJ5R79nDU8+6PoBgxoPKkF0LQMOL4ADcyA7GVr8BXr9E1ybluu8CpOancvivREs2R9JVm4eQ9t581pvP3xqKw19hUJhGrN0/gA9nmmKT/PaNGrrekfqZWWScegQ0S9Pw9avCb7ffHOH45dSsjd6L3NPziUkKYTGtRrzavtXsRS3vojq2tflyQZPmhZdy82G40th3+eQkQB+T8LjM6BemwrbnWkwsuyPSyzcE0FKVi5PtarH6338aOKmRNcUCkXpmK3zt7G3olmXepV2PGNSEonfLCZt+/YiMX1jfDw29X3xXbKkoCbuTQ7HHmbOyTmcTjiNT00fPu7+Mf0b9MeyrCtq83Lh1ErY8ymkRkOD7jB6Ffh0LrPdyZkGFu2NYPOZWPIKPZxPzswlLdvI483ceKOPPwFeSnRNoVCUHbN1/pVFXloaN5Yu48ayZeRnZ+PYoweWTrdmxxY1HKk7dQpWLrce/gYnBDP3xFwOXzuMu4M773V5jyFNhmBtUcZMmfw8OPuTJrp2IwK8OsJf5kOjnmW2Oz3HyLf7I/lmXwTpOUZ6+rvi4nDrzsLGyoIRHX3oUN+EBpBCoVCUwH3r/HMiIrixdBnGxETTg6Qk88QJ8lNSqPnkk7i+Mg3bxo1NDv/zxp/MOzmPPdF7qG1Xm7c6vcXIpiOxtSxjpoyU8Ocm2PlfSLgA7gHwzGrw71dm0bXs3Dy+PxjF13vCuZFhoG8Ld97o608zD6fSd1YoFNVKSEgIo0aNKngfERHBBx98wPjx4x8sSefKprCksykM0TFcnz+flI0bEXZ22NSvX+J4G29v6k6dgl2LFibHRKRE8NWpr9h6aSs1bWryfMDzjGk2xrSG/u1ICeE7NCmGqyehThPtQW6LoWBC4+eO8zLms+bYFebtvEhcag7d/eryZt+mtPGp+AIvheJhwtzy/PPy8vDy8uLw4cPMnz//gZN0rlSM8fHEz/qyxP6UTZsQQlB73DjqTJ5UkIJZEWLSY/j61Nf8GvErtpa2TG49mQktJ+BkU45ZdtQfsONDuPwH1PKFIfO11E3Lsn20efmSn0/GMHtHKFduZNGpgQtzRrcjsFHFz0uhUFQ/O3bsoHHjxtSvX//Bk3SubIwJCSQuWWKyX1hZ4fz009SdOgVrj+IqS5aN+Mx4Fp1exE8Xf8ICC/7a/K9MbDWR2nblKFpy9aTm9MN3gKM7DPgM2o8Hq7KFiPLzJVvOXuOLbSGEJ2QQ4OXEh88F0MPfVckpKxR3SfKv4RiuZpQ+sBzYeNbAeZDpsPHtrF69mmeeeQZASTqXhq2fH81Pn67w/hcSL3Ap9VKJY85dP8fqkNXk5ecx1G8ok1tPxqNGCV8kV45CctSt91LChY1w4Vewd4E+H0CnSWBTthCRlJJdIfF8HhTKuaup+Lk58vXY9vQL8FBOX6F4QDAYDPzyyy98/PHHd/QpSediMKWMWRohN0KYd3Ieu6N3lzrWQlgwsNFAprSZgk9NH9MDrxzVNPQj99zZZ1MTer4Nj/wN7MoeIvoj/DqfB4VyPCoJ39oOzBrVhsFtvJSGvkJRyZRnhl4VbNmyhfbt2+Pu7g6gJJ3vlpj0GLJyb0krZBgzWHF+Bb9f+p2a1jWZ1m4avX17Qwm+1MnGibr2JQimXTujPbgN/R0c6sKTH0GT3hQ5aE2Pcjn9k5eT+CwohANhiXg42fHR0FaM6Kg09BWKB5UffvihIOQDMHjwYCXpXBHOJZ5j7sm5HIg5cEefvZU9k1pNYkLLCdSyvYuFTtcvwq6PtKLotrXg8XcgcCrYlq02QHFciE3l86AQtl+Ip04NG/41sAVjA32xs1Ya+grFg0pGRgbbtm1j4cKFBW3Tp09Xks4lcXuqZ1hSGPNPzWf75e042TgxoeUE6jvdSu0UCDq4d6CO/V1kxiRFwZ7/QfAqsLKHR6ZC15e1eH4FCU9IZ9a2UDadjsXJzooXezTm2a4NqGF7X3zXKhT3JeaW6llVPJCpnje5knqFr4K/4reI33CwdmBqm6mMazGOmjaVqFuTdg32fgbHl2klxAKnahr6jq4VPmR0Uiazt1/kpxPR2Flb8nKvJkzq3ohaDkpDX6FQmBdm5fxz83N5/+D7bLi4AUsLS55t+SzPBTyHi10lShhk3tA09I98A/m50O6vWsWsWiUUUC+F+NRs5u0K44cjlxFC8Fy3hkzt2Zi6SkNfoVCYKWbl/MOSwtgQtoHh/sOZ1HoSbg5upe90k2tnYe//4HpYyeOSozRp5dajNA392iUUUC+FpAwDC/aE893BSxjzJCM7+TDt8SbUq2Vf4WMqFArFvcCsnH8t21psGroJL8dyzMJvf1DbsHvJ4707aCmabhWPDaZl57J4XyRL9keSYTAytK0Xr/b2o36dihdYVygUinuJWTl/T0dP047/6ik4tgQMhVKfDOlwMQis7ODRN6DrNHAoxyrdcpJlyOO7g5dYsCec5Mxc+gd48EYff/zclYa+QqG4vzAr518s8X/Crv/ChV+0xVWOhUJBQkDnF6H7G0XbK5kcYx6rj1xh3q4wEtJy6NnUlf/r05RW3kpDX6FQ3J+Yr/PPSISgGXB6DVg7QI/p0OVvYFd1Djcjx8iGUzEkZ+YWtBmM+aw7Hk1MchaBDWvz1dj2dGpQdXcXCoXi/mbWrFksXrwYIQStWrVi6dKlxMbGMnr0aBITE+nQoQPff/89NjY2zJ07l4ULF+Lr68uGDRuwsbFh//79/PTTT8yaNatK7TRP55+VBN8PgYQQ6PISdHsdalSdymV2bh4rD1/m691hXE833NHfxseZmcNa8WiTukp/R6FQmCQmJoY5c+Zw/vx57O3tGTlyJKtXr2bz5s28/vrrjB49milTprBkyRKmTp3KypUrOX36NB999FGBtMOHH37IDz/8UOW2mp/zz06FFcM0x//MD7q0QtWQm5fPj8eimbvzIrEp2XRrUoeFfZoS4FVUusHWSq3IVSgUZcNoNJKVlYW1tTWZmZnUq1ePnTt3smrVKkCTdP73v//N1KlTkVKSm5tbIOm8YsUK+vfvT+3aVR9dMC/nL/Nh1SiIDYaR31eZ48/Ll/wSHMOX2y8SlZhJe19nPh/Zhq6NS9D8USgU9w1btmzh2rVrlXpMDw8P+vfvX+IYLy8v3nzzTXx9fbG3t6dv37506NABZ2dnrKw0d+vt7U1MTAwAL7/8Mo888ggtW7akW7duDBkyhK1bt1aq3aYwL+d/IwKuRMKwxdBsQLl3z87Nw9JCmBRMk1Ky9dw1vtgWSmhcOi3qOfHtsx3p1dRNhXMUCsVdk5SUxMaNG4mMjMTZ2ZkRI0bw+++/mxw/btw4xo0bB8AHH3zAK6+8wpYtW1i+fDk+Pj58/vnnWJSxGmB5MS/nn5MGQ76HgGHl3vVqchajFh3EYMzn5cf9GNXRBxsr7UOTUrInNIHPg0I5E5NCY9cazB/Tnv4BHlgoOWWF4oGjtBl6VbF9+3YaNmyIq6smE/P0009z4MABkpOTMRqNWFlZER0djZdX0ZT2m+Ju7777Lj169GDnzp385z//YceOHQV6/5WNeTn/uv7Qdky5d4tPzWbMN4dIzsjFz92Rf204y6K94bz6hD9ezvZ8sS2Eo5eS8Hax57MRbfhLW0+slJyyQqGoZHx9fTl06BCZmZnY29uzY8cOOnbsSK9evVi3bh2jR48uVtL5X//6Fx988AHAQyrpbFP+FbKJ6TmMXXyY+LQcvp/Ymfa+LuwOTeDzoBDe/DEYALeatnz4l4AidwMKhUJR2QQGBjJ8+HDat2+PlZUV7dq1Y/LkyTz11FOMHj2ad955h3bt2jFx4sSCfU6ePAlA+/btARgzZgytWrXCx8eHt956q8psrRRJZyHE/wGfAa5SyutCC6DPBgYAmcCzUsoTpR3ndknn0kjJzOWZbw4RnpDO0uc6FXlgK6Vk2/k4EjMMDG3npTT0FYoHHCXpfI8lnYUQPkBf4HKh5v6An/4KBL7Wf5aZP6+l8u7Gcxjz8k2OiUvNIT4tm2/Gd7wjU0cIQd+WFS/yrlAoFA8ylREDmQW8BRS+hRgCLJcahwBnIUS98hz0m72RnI5OpoatlclXEzdHFo3vSM+mVSftoFAoFA8idzXzF0IMAWKklMG3pUp6AVcKvY/W22LLcty07Fw2n4llaDsvPn669d2YqFAoFIpiKNX5CyG2A8XFT2YA/0QL+VQYIcRkYDJoT8oBNp2OJSs3j5Edfe7m0AqFQqEwQanOX0pZ7DJbIUQroCFwc9bvDZwQQnQGYoDCnttbbyvu+IuARaA98AVYc/QK/u6OtPVxLvuZKBQKhaLMVDjmL6U8I6V0k1I2kFI2QAvttJdSXgN+AcYLjUeAFCllmUI+oXFpnLqSzMiOPmrVrUKhUFQRVZX0vhmIAMKAb4C/lXXHtUevYGUhGNqu4jV1FQqForqYPXs2AQEBtGzZki+//BKAGzdu0KdPH/z8/OjTpw9JSUkA/PTTT7Rs2ZLu3buTmJgIQHh4OKNGjapyOyvN+et3ANf1bSmlfElK2VhK2UpKWabkfSnh55Mx9G7uTh1V/FyhUNxnnD17lm+++YYjR44QHBzMpk2bCAsLY+bMmTzxxBNcvHiRJ554gpkzZwIwd+5cjh49yosvvlig+vnOO+/wn//8p8ptNavlrmnZuSRmGBjVST3oVSgU9x8XLlwgMDAQBwcHrKys6NGjB+vXr2fjxo1MmDAB0CSdN2zYAICFhQU5OTkFks779u3Dw8MDP3i4iwUAAArUSURBVD+/KrfVrOQdbmQaaOxkS3c/Ja2sUCgqTmjoh6SlX6jUY9Z0bI6//79KHBMQEMCMGTNITEzE3t6ezZs307FjR+Li4qhXT1vq5OHhQVxcHABvv/02vXv3xtPTkxUrVjBixAhWr15dqXabwqycf1q2keEdvJXomkKhuC9p3rw5//jHP+jbty81atSgbdu2WFoWlZYRQhQks/Tp06dAtXP58uUMGDCA0NBQPvvsM1xcXJg9ezYODg5VYqtZOX+AER1UyEehUNwdpc3Qq5KJEycWCLf985//xNvbG3d3d2JjY6lXrx6xsbG4uRVVJcjMzGTZsmUFpRzXr1/PunXrWLlyJZMmTaoSO81qiu3tYk+DuuVX9lQoFApzIT4+HoDLly+zfv16xowZw+DBg/nuu+8AipV0/vTTT3nllVewtrZ+OCWdXRxsqtsEhUKhuCuGDRtGYmIi1tbWzJ8/H2dnZ6ZPn87IkSNZsmQJ9evXZ+3atQXjbxZyee+99wCYNm0anTp1wtnZueDBcFVQKZLOlUV5JZ0VCoXiJkrSuXySzmYV9lEoFArFvUE5f4VCoXgIUc5foVAoHkKU81coFA8M5vQMsyqozPNTzl+hUDwQ2NnZkZiY+MB+AUgpSUxMxM7OrlKOZ1apngqFQlFRvL29iY6OJiEhobpNqTLs7Ozw9vaulGMp569QKB4IrK2tadiwYXWbcd+gwj4KhULxEKKcv0KhUDyEKOevUCgUDyFmJe8ghEgDQqrbjjJQF7he3UaUAWVn5XI/2Hk/2AjKzsqmqZSyZnl2MLcHviHl1aeoDoQQx5SdlYeys/K4H2wEZWdlI4QotyiaCvsoFArFQ4hy/gqFQvEQYm7Of1F1G1BGlJ2Vi7Kz8rgfbARlZ2VTbjvN6oGvQqFQKO4N5jbzVygUCsU9wCycvxDiQyHEaSHEKSFEkBDCU28XQog5Qogwvb99Ndv5qRDiT92Wn4UQzoX63tbtDBFCPFnNdo4QQpwTQuQLITre1mdOdvbT7QgTQkyvTlsKI4T4VggRL4Q4W6itthBimxDiov7TpTpt1G3yEULsEkKc16/3q+ZoqxDCTghxRAgRrNv5vt7eUAhxWL/+a4QQ1V7HVQhhKYQ4KYTYZMY2XhJCnNH95TG9rfzXXEpZ7S/AqdD2K8ACfXsAsAUQwCPA4Wq2sy9gpW9/Anyib7cAggFboCEQDlhWo53NgabAbqBjoXazsROw1H9/I8BGt6tFdV7fQrY9BrQHzhZq+x8wXd+efvPaV7Od9YD2+nZNIFS/xmZlq/7/66hvWwOH9f/ntcBovX0BMNUMPtM3gFXAJv29Odp4Cah7W1u5r7lZzPyllKmF3tYAbj6IGAIslxqHAGchRL17bqCOlDJISmnU3x4CbsrrDQFWSylzpJSRQBjQuTpsBJBSXpBSFrdYzpzs7AyESSkjpJQGYLVuX7UjpdwL3LiteQjwnb79HfCXe2pUMUgpY6WUJ/TtNOAC4IWZ2ar//6brb631lwQeB9bp7dVupxDCG3gKWKy/F5iZjSVQ7mtuFs4fQAjxXyHEFWAs8K7e7AVcKTQsWm8zB55HuysB87azMOZkpznZUhbcpZSx+vY1wL06jbkdIUQDoB3arNrsbNXDKaeAeGAb2l1fcqHJlDlc/y+Bt4B8/X0dzM9G0L44g4QQx4UQk/W2cl/ze7bCVwixHfAopmuGlHKjlHIGMEMI8TbwMvDevbKtMKXZqY+ZARiBlffStsKUxU5F1SCllEIIs0mTE0I4Aj8Br0kpU7UJq4a52CqlzAPa6s/JfgaaVbNJRRBCDATipZTHhRA9q9ueUnhUShkjhHADtgkh/izcWdZrfs+cv5SydxmHrgQ2ozn/GMCnUJ+33lZllGanEOJZYCDwhNQDbJihnSa453beJ7aUhTghRD0pZaweeoyvboMAhBDWaI5/pZRyvd5slrYCSCmThRC7gC5oYVwrfWZd3de/GzBYCDEAsAOcgNlmZiMAUsoY/We8EOJntBBqua+5WYR9hBB+hd4OAW5+k/0CjNezfh4BUgrd2txzhBD90G4LB0spMwt1/QKMFkLYCiEaAn7AkeqwsRTMyc6jgJ+eTWEDjNbtM1d+ASbo2xOAar+70mPSS4ALUsovCnWZla1CCNebmXFCCHugD9rziV3AcH1YtdoppXxbSuktpWyA9re4U0o5FjOyEUAIUUMIUfPmNloSylkqcs2r+8m1Pnn+ST+B08CvgJe8lSUwHy0+eIZCmSvVZGcYWpz6lP5aUKhvhm5nCNC/mu0cihafzAHigK1maucAtAyVcLRwVbX/Lep2/QDEArn65zgRLf67A7gIbAdqm4Gdj6LFf08X+pscYG62Aq2Bk7qdZ4F39fZGaJOPMOBHwLa6P1Pdrp7cyvYxKxt1e4L117mb/zcVueZqha9CoVA8hJhF2EehUCgU9xbl/BUKheIhRDl/hUKheAhRzl+hUCgeQpTzVygUiocQ5fwVCoXiIUQ5f4VZIoT4txDizSo8vrMQ4m9VdfwSfm96ZYxRKO4W5fwVDx1CCCvAGSi38xdCWFa+RQrFvUc5f4XZIISYIYQIFULsR6tHgBCisRDid13BcJ8QopnevkwIsUAIcUzfZ6De3kAfd0J/ddXbe+rtvwDngZlAY70gxqd6/6ZCtszTdZxuFs/4RAhxAhhhyiYT59RQCHFQL77xn9v6/i6EOCq04kDvF7OvoxBih34eZ4QQQ/T2D4QQrxUa91+hF3JRKMpMdS+lVi/1klICdECT8HBAE9UKA95EW7Lup48JRNNcAVgG/I42gfFDk2Gw0/e308f4Acf07Z5ABtBQf9+AosVaeqIv6dffzwOe1bcvAW8V6ivWJhPn9QswXt9+CUjXt/uiFd0W+jlsAh7T+26OsUIvdATU1T8Todt+Qm+3QJPHqFPd11C97q/XPVP1VChKoTvws9QF8/QZuh3QFfixkEyxbaF91kop84GLQogINJngSGCeEKItkAf4Fxp/RGpFbCrCGt0ux1Jsup1uwDB9+3u0CnCgOf++aJo3AI5oX1Z7C+0rgI+EEI+hacx7oem2XxJCJAoh2qHptp+UUiZW8LwUDynK+SvMGQu0YhptTfTfLkwlgdfRxOza6PtnF+rPKOF3GSkaBrW7rf/mvqXZVBY7QXPsH0spF5aw31jAFeggpcwVQlwqZNdi4Fm0mg7flsMWhQJQMX+F+bAX+IsQwl6XrB0EZAKRQogRoEkYCyHaFNpnhBDCQgjRGE3tMASoBcTqdwTj0GoFF0caWt3bm0QBLXS5a2fgieJ2klrJ0ZJsup0DaBLBoDnzm2wFntfvJBBCeAmtOEdhaqEVGMkVQvQC6hfq+xnoB3TSj6VQlAvl/BVmgdRq0a5Bk6rdgqb3D5rDnCiEuClhW7jO72U0ud0twBQpZTbwFTBBH98ME7N9PUxyQAhxVgjxqZTyClqx7rP6z5PF7VcGm27nVeAlIcQZCpUAlFIGoRUKP6j3raPolxFohY066v3juVXnAqnVPd6FFvrKK+H3KxTFoiSdFfclQohlaA9o15U29kFECGEBnABGSCkvVrc9ivsPNfNXKO4zhBAt0DJ/dijHr6goauavUFQCQogZwIjbmn+UUv63OuxRKEpDOX+FQqF4CFFhH4VCoXgIUc5foVAoHkKU81coFIqHEOX8FQqF4iFEOX+FQqF4CPl/1v5zdzcMMPcAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "without_extremes = df.drop(['0%', '100%'], 1)\n",
    "without_extremes.plot(x='departure_delay', xlim=(-30,50), ylim=(-50,50));"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note the crazy non-linearity for top half of of the flights that leave more than 20 minutes early. Most likely, these are planes that try to beat some weather situation. About half of such flights succeed (the linear bottom) and the other half don't (the non-linear top). The average is what we saw as the weird hump in the probability plot. So yes, the hump is real. The rest of the distribution is clear-cut and the Bayes probabilities are quite valid."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Solving the flights problem using GCP tools end-to-end (from ingest to machine learning) is covered in this book:\n",
    "[<img src=\"https://aisoftwarellc.weebly.com/uploads/5/1/0/0/51003227/published/data-science-on-gcp_2.jpg?1563508887\"></img>](https://www.amazon.com/Data-Science-Google-Cloud-Platform/dp/1491974567)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Machine Learning in BigQuery\n",
    "\n",
    "Here, we will use BigQuery ML to create a deep neural network that predicts the duration of bicycle rentals in London."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%bigquery\n",
    "CREATE OR REPLACE MODEL ch09eu.bicycle_model_dnn\n",
    "TRANSFORM(\n",
    "  duration\n",
    "  , start_station_name\n",
    "  , CAST(EXTRACT(dayofweek from start_date) AS STRING)\n",
    "         as dayofweek\n",
    "  , CAST(EXTRACT(hour from start_date) AS STRING)\n",
    "         as hourofday    \n",
    ")\n",
    "OPTIONS(input_label_cols=['duration'], \n",
    "        model_type='dnn_regressor', hidden_units=[32, 4])\n",
    "AS\n",
    "SELECT \n",
    "   duration, start_station_name, start_date\n",
    "FROM \n",
    "  `bigquery-public-data`.london_bicycles.cycle_hire"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean_absolute_error</th>\n",
       "      <th>mean_squared_error</th>\n",
       "      <th>mean_squared_log_error</th>\n",
       "      <th>median_absolute_error</th>\n",
       "      <th>r2_score</th>\n",
       "      <th>explained_variance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>988.359648</td>\n",
       "      <td>1.410700e+08</td>\n",
       "      <td>0.924314</td>\n",
       "      <td>626.704285</td>\n",
       "      <td>0.000283</td>\n",
       "      <td>0.000283</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   mean_absolute_error  mean_squared_error  mean_squared_log_error  \\\n",
       "0           988.359648        1.410700e+08                0.924314   \n",
       "\n",
       "   median_absolute_error  r2_score  explained_variance  \n",
       "0             626.704285  0.000283            0.000283  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%bigquery\n",
    "SELECT * FROM ML.EVALUATE(MODEL ch09eu.bicycle_model_dnn)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>predicted_duration</th>\n",
       "      <th>start_station_name</th>\n",
       "      <th>start_date</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1279.038818</td>\n",
       "      <td>Park Street, Bankside</td>\n",
       "      <td>2019-08-27 03:51:21.657416+00:00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   predicted_duration     start_station_name                       start_date\n",
       "0         1279.038818  Park Street, Bankside 2019-08-27 03:51:21.657416+00:00"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%bigquery\n",
    "SELECT * FROM ML.PREDICT(MODEL ch09eu.bicycle_model_dnn,(\n",
    "    SELECT \n",
    "    'Park Street, Bankside' AS start_station_name\n",
    "    ,CURRENT_TIMESTAMP() AS start_date\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## BigQuery and TensorFlow\n",
    "\n",
    "Batch predictions of a TensorFlow model from BigQuery!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "%%bigquery\n",
    "CREATE OR REPLACE MODEL advdata.txtclass_tf\n",
    "OPTIONS (model_type='tensorflow',\n",
    "         model_path='gs://cloud-training-demos/txtclass/export/exporter/1549825580/*')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>input</th>\n",
       "      <th>prediction</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Unlikely Partnership in House Gives Lawmakers ...</td>\n",
       "      <td>{'_field_2': 'nytimes', '_field_1': 0.97631376...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Fitbit's newest fitness tracker is just for em...</td>\n",
       "      <td>{'_field_2': 'techcrunch', '_field_1': 0.99999...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Show HN: Hello, a CLI tool for managing social...</td>\n",
       "      <td>{'_field_2': 'github', '_field_1': 0.958878636...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                               input  \\\n",
       "0  Unlikely Partnership in House Gives Lawmakers ...   \n",
       "1  Fitbit's newest fitness tracker is just for em...   \n",
       "2  Show HN: Hello, a CLI tool for managing social...   \n",
       "\n",
       "                                          prediction  \n",
       "0  {'_field_2': 'nytimes', '_field_1': 0.97631376...  \n",
       "1  {'_field_2': 'techcrunch', '_field_1': 0.99999...  \n",
       "2  {'_field_2': 'github', '_field_1': 0.958878636...  "
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%bigquery\n",
    "SELECT\n",
    "  input,\n",
    "  (SELECT AS STRUCT(p, ['github', 'nytimes', 'techcrunch'][ORDINAL(s)]) prediction FROM\n",
    "    (SELECT p, ROW_NUMBER() OVER() AS s FROM\n",
    "      (SELECT * FROM UNNEST(dense_1) AS p)) \n",
    "  ORDER BY p DESC LIMIT 1).*\n",
    "FROM ML.PREDICT(MODEL advdata.txtclass_tf,\n",
    "(\n",
    "SELECT 'Unlikely Partnership in House Gives Lawmakers Hope for Border Deal' AS input\n",
    "UNION ALL SELECT \"Fitbit\\'s newest fitness tracker is just for employees and health insurance members\"\n",
    "UNION ALL SELECT \"Show HN: Hello, a CLI tool for managing social media\"\n",
    "))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We use the bicycle rentals problem as a way to illustrate lots of BigQuery features in\n",
    "[<img src=\"https://aisoftwarellc.weebly.com/uploads/5/1/0/0/51003227/published/bigquery-the-definitive-guide.jpg?1563508864\"></img>](https://www.amazon.com/Google-BigQuery-Definitive-Warehousing-Analytics/dp/1492044466)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Copyright 2019 Google Inc. Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "environment": {
   "name": "tf2-2-3-gpu.2-3.m56",
   "type": "gcloud",
   "uri": "gcr.io/deeplearning-platform-release/tf2-2-3-gpu.2-3:m56"
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
